VS中scanf_s失效原因?
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_s不再生效(缓冲区已经清空)
回复
1个回答

test
2024-07-12
当你用 scanf_s("%d", &input);
来读入一个数字类型的内容的时候,如果输入的内容不是数字,这个内容并不会被读取,而是仍在输入流中等待被读取,你下次循环就又拿到了这个内容,还是不会被读取,就陷入了死循环。建议把代码改为:
int main()
{
int input = 0;
char buffer[256];
do
{
printf("请输入:>");
scanf("%s", buffer);
input = atoi(buffer);
fflush(stdin);
if (input == 1)
{
printf("haha");
}
} while (input != 1);
return 0;
}
就没这个问题了
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容