You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 15:24:03