当使用scanf_s仅获取整数时,如何进行错误检查?

当使用scanf_s仅获取整数时,如何进行错误检查?,c,scanf,C,Scanf,编辑1: 对不起,我正在上编程入门课。。。我读了这两个链接,但不完全理解它们 我试图补充 if (scanf_s("%d", &input) == 0) { fflush(stdin); continue; } 但这似乎没什么作用。我知道scanf处于错误状态,所以它将拒绝运行,我需要清除用户错误输入的缓冲区 所以基本上,我在寻找一个初学者的解决方案,对于刚刚学习循环、输入/输出和基本错误检查的人来说 ~~~~~~~~~ 我是C新手,有一

编辑1: 对不起,我正在上编程入门课。。。我读了这两个链接,但不完全理解它们

我试图补充

    if (scanf_s("%d", &input) == 0) {
        fflush(stdin);
        continue;
    }
但这似乎没什么作用。我知道scanf处于错误状态,所以它将拒绝运行,我需要清除用户错误输入的缓冲区

所以基本上,我在寻找一个初学者的解决方案,对于刚刚学习循环、输入/输出和基本错误检查的人来说

~~~~~~~~~

我是C新手,有一个小问题。我想从控制台读取整数列表。如果用户确实输入了整数,它就可以正常工作,但是如果它输入“acdb”或“0.5”之类的内容,我只需要让程序无限地打印“输入一个数字”,就好像它正在运行循环,但scanf_s被破坏了,所以它只是跳过自己

谢谢你的帮助

int input = 1;  
while (input != 0) {
        printf("enter a number: \n");
        scanf_s("%d", &input);

/* rest of code omitted */

}

scanf_s
返回变量参数列表中已成功填充数据的变量数

在你的例子中,你希望它是1


如果您确实遇到了无效输入,那么您的工作就是清除它,否则它将保留在输入流中。有关这方面的更多信息,请参见返回值检查。不要使用
fflush(stdin)
-它通常是UB(尽管在某些平台上允许)。问题是,如果有人输入2.5扫描,则仍然返回1,而stdin仍然包含.5。重复问题中的解决方案也不能解释这一点。这两个问题都表示,他们只希望将整数输入控制台,但两个解决方案都不希望只检查整数。