C语言中使用_getch()后scanf_s被忽略跳过的问题如何解决?
问题根因
scanf_s 匹配整数失败时,不会自动丢弃输入缓冲区中不匹配的内容。你输入 hello 后,整个字符串都残留在缓冲区里,下一次循环执行 scanf_s("%d") 时会直接读取残留的无效内容,再次匹配失败,就会出现无限触发错误提示的情况。
解决方法
校验到输入非数字后,先清空输入缓冲区的所有残留内容,再等待用户按任意键重新输入。
清空缓冲区可以用如下逻辑,把缓冲区中直到换行符的所有内容都读取丢弃:
while(getchar() != '\n');
修正后完整代码
#include <stdio.h> #include <conio.h> int main() { printf("\t\tWelcome To Prime Check App\n"); while (1) { printf("\n\n\t[*] Enter Number: "); int num; int checknum = scanf_s("%d", &num); if (checknum == 0) { printf("\n\t[-] Not A Number!"); // 清空输入缓冲区残留的无效内容 while (getchar() != '\n'); _getch(); } } return 0; }
内容的提问来源于stack exchange,提问作者iHapiW
相关产品推荐
相关产品推荐

