int main()
{
int input = 0;
do
{
printf("请输入:>");
scanf_s("%d,", &input);
fflush(stdin);
if (input == 1)
{
printf("haha");
}
} while (input != 1);
return 0;
}
在VS这段代码中当输入时输入的不是数字时循环不断但是后续的scanf失效了(缓冲区已经清空)
1、scanf_s 是安全版的 scanf,它在 Microsoft Visual C++ 中被引入,主要是为了解决 scanf 函数存在的缓冲区溢出漏洞。scanf_s 函数和 scanf 函数的用法基本相同,但是它多了一些限制条件,比如格式字符串中必须含有小数点和精度说明符,输入输出流必须是有效的文件指针,以及输入字符串的长度必须小于给定的缓冲区大小等。
2、在你的代码中,你使用的是 scanf_s("%d,", &input),注意到后面的逗号,这样会导致 scanf_s 函数无法正常工作,因为在格式字符串中逗号是无意义的。正确的写法应该是 scanf_s("%d", &input)。
3、此外,你还使用了 fflush(stdin) 函数,但是在 Windows 平台上 fflush(stdin) 是无效的。你可以使用 fseek 函数来清空输入流,例如:
fseek(stdin, 0, SEEK_END);
或者,你可以使用 getchar 函数来读取并抛弃输入流中剩余的所有字符,例如:
int c;
while ((c = getchar()) != '\n' && c != EOF) {}
%d你输入字符串就这样子。
fflush(stdin); 放到输入前
scanf_s("%d,", &input);