C语言程序错误提示重复显示问题求助:为何报错信息输出两次?
问题原因及解决办法
核心问题:输入缓冲区遗留换行符未处理
当你输入非'L'的字符(比如输入X后按回车),输入缓冲区里会留下两个字符:输入的目标字符,以及换行符\n。
- 第一次
scanf("%c", &choice)读取到输入的字符(如X),转大写后判断不是'L',输出错误提示。 - 循环继续执行,第二次
scanf("%c", &choice)会读取缓冲区里剩下的换行符\n,toupper('\n')结果还是\n,依然不等于'L',因此会再次输出错误提示,这就是重复两次的根源。
额外代码错误
你的代码还有两个明显问题:
- 重复包含了
<stdio.h>、<ctype.h>、<stdlib.h>头文件,并且在main函数内部又定义了一次main函数,这会直接导致编译失败。 - 循环结束后判断
choice == 'E'的逻辑永远不会触发,因为循环退出条件是choice != 'L',只有输入'L'才会退出循环,此时choice的值是'L',不可能等于'E'。
修复方案
- 删除重复的头文件包含和
main函数定义,只保留一份正常的结构。 - 修改
scanf格式,在%c前加一个空格,用来跳过缓冲区里的空白字符(包括换行符、空格等):scanf(" %c", &choice); - 调整循环逻辑,同时支持'L'显示列表和'E'退出的功能:
do { scanf(" %c", &choice); choice = toupper(choice); if(choice != 'L' && choice != 'E') printf("ERROR: invalid option. Please, try again: "); } while(choice != 'L' && choice != 'E'); if(choice == 'E') return 0; // 后续执行显示术语表的代码
内容的提问来源于stack exchange,提问作者Andrea
相关产品推荐
相关产品推荐

