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

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'。

修复方案

  1. 删除重复的头文件包含和main函数定义,只保留一份正常的结构。
  2. 修改scanf格式,在%c前加一个空格,用来跳过缓冲区里的空白字符(包括换行符、空格等):
    scanf(" %c", &choice);
    
  3. 调整循环逻辑,同时支持'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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:55:26