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
相关产品推荐
相关产品推荐

