You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C语言switch语句运行后输出含两个换行的原因及解决方法

解决C语言switch语句输入1时输出带两个换行的问题

首先看了你的代码,每个case的printf都只带了一个\n,正常来说输出应该是一行内容加一个换行,不会出现两个换行的情况。结合你说只有输入1时出现这个异常,我整理了几个可能的原因和对应的解决办法:

可能的原因

  • 输入操作的误判:你输入1时可能不小心按了两次回车,程序输出1---A加一个换行后,终端的命令提示符会在下一行显示,看起来像是输出了两个换行,但实际上程序只输出了一个。不过这种情况应该所有输入都会出现,你说只有输入1时异常,可能是偶然的操作失误?
  • 代码中隐藏的额外换行:有可能你复制代码时,case 1的printf语句后面不小心混入了看不见的换行符或者多打了一个\n。比如原本的"%d---A\n"变成了"%d---A\n\n",只是你没注意到。
  • IDE/终端的自动处理:部分IDE在程序运行结束后,会自动添加一个换行来分隔程序输出和后续的提示信息(比如"按任意键继续"),如果刚好输入1时这个提示的换行和程序的换行叠加,就会看起来像两个换行。
  • 输入缓冲区残留的字符:虽然scanf("%d")会跳过空白字符,但如果输入缓冲区里残留了之前的换行符,理论上不会影响当前程序的输出,但也不排除某些特殊情况。

解决办法

  1. 检查case 1的代码:仔细核对case 1的printf格式字符串,确保只有一个\n,没有多余的换行。可以临时把case 1的printf改成printf("%d---A", i);(去掉\n),运行后看输出是否还会有两个换行,以此判断是不是格式字符串的问题。
  2. 清除输入缓冲区:在scanf之后添加一段代码,清除输入缓冲区里剩余的字符,避免残留的换行符造成干扰:
    scanf("%d",&i);
    // 清除缓冲区直到遇到换行符
    while(getchar() != '\n');
    
  3. 在命令行直接运行程序:如果是用IDE运行的,试试编译生成可执行文件后,在系统的命令行(比如Windows的CMD、Linux的Terminal)里直接运行,排除IDE的自动处理导致的问题。
  4. 替换换行方式:可以把\n换成\r\n(Windows系统下),或者用puts函数代替printf,比如puts("1---A");,看看输出是否正常。

内容的提问来源于stack exchange,提问作者Hundreds-N

火山引擎 最新活动