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

C语言程序首次运行正常,再次运行重复输出最后消息问题求助

问题根源

当输入非整数内容(如字母、符号、小数)时,scanf("%d", &a)或scanf("%d", &b)会读取失败:此时输入缓冲区里的无效字符不会被自动清空,后续循环里的scanf会反复读取这些无效内容,导致a和b始终保留上一次的有效输入值,程序因此不断重复输出最后一次的判断结果。

解决方案
  • 校验scanf返回值:scanf会返回成功读取的变量数量,读取整数成功时返回1,失败则返回0或EOF。通过判断返回值可识别输入是否有效。
  • 清空输入缓冲区:当scanf读取失败时,用循环将缓冲区中剩余的所有字符读取并丢弃,直到遇到换行符,避免无效内容干扰后续输入。
修正后的代码
#include <stdio.h>

int main(){
    while(1){
        int a;
        int b;
        // 读取A并校验输入有效性
        if(scanf("%d", &a) != 1){
            // 清空缓冲区的无效内容
            while(getchar() != '\n');
            printf("请输入整数类型的A\n");
            continue;
        }
        // 读取B并校验输入有效性
        if(scanf("%d", &b) != 1){
            while(getchar() != '\n');
            printf("请输入整数类型的B\n");
            continue;
        }
        if(a > b){
            printf("A is bigger than B\n");
        }
        else if(a == b){
            printf("A and B are equal\n");
        }
        else{
            printf("B is bigger than A\n");
        }
    }
    return 0;
}

内容的提问来源于stack exchange,提问作者gent9

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:35:25