首页 > 解决方案 > scanf 对错误的输入返回非 0 值

问题描述

如果我在此配置下将“1k”(或任何后跟字母的数字)输入到 scanf 中,我仍然会从函数返回 true(非 0),如果存在除整数之外的任何内容,是否有任何方法显式返回 false?基本上我想知道我的字符串是否只是数字

ps 合法开关检查我的输入是否是几个给定选项之一

void clearBuffer() {
    while (getchar() != '\n') {}
}

int getChoice(){
    int choice = 0;


    //clearBuffer();

    while (scanf("%d",&choice)!=0 ||!legalSwitch(choice))
    {
        clearBuffer();
        printf("\nWrong choice, please choose an integer between 1 to 3: ");


    }
}

标签: c

解决方案


您可能想使用fgets读取整行(始终检查返回值),然后使用if (sscanf(line, "%d%n", &choice, &size) >= 1 && size == strlen(line))(另请参见sscanf)。

或者,您可以使用strtoulstrtoull代替sscanf


推荐阅读