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

关于getchar()函数输入末尾带空格需两次回车的问题咨询

输入末尾带空格需两次Enter才执行的原因及修复

问题原因

你的代码里两处逻辑共同导致了这个问题:

  • 当输入末尾的空格被读取后,进入while (ch == ' ') ch = getchar();循环,此时会读取到你按下的Enter(即\n),这个换行符会被存进数组。
  • 内层读取循环会继续执行ch = getchar(),但此时输入流已空,getchar()会阻塞等待新输入,所以你必须再按一次Enter才能让代码继续。

具体流程拆解(以输入test +Enter为例):

  1. 读取完test四个字符后,读取到空格,进入空格循环,读取下一个字符为\n。
  2. 退出空格循环后,代码把\n存入数组,计数器i达到MAX_SIZE-1(即5)。
  3. 回到内层循环条件,执行ch = getchar(),此时输入流为空,getchar()阻塞等待新输入。
  4. 你再次按Enter,ch被赋值为新的\n,内层循环条件不满足,退出循环。
  5. 后续清理缓冲区的逻辑跳过,代码才会打印结果。

修复后的代码

#include <stdio.h>
#include <ctype.h>

#define MAX_SIZE 6 // +1 space for the null terminator

int main()
{
    char array[MAX_SIZE] = { 0 };
    char ch = 0;

    while (1)
    {
        int i = 0;
        while ((ch = getchar()) != EOF
              && ch != '\n'
              && i < MAX_SIZE - 1)
        {
            // 跳过单个空格,直接进入下一轮读取
            if (ch == ' ') {
                continue;
            }

            // 大小写转换
            if (islower(ch))
                ch = toupper(ch);
            else if (isupper(ch))
                ch = tolower(ch);

            array[i++] = ch;
        }

        array[i] = '\0';

        // 清理当前行剩余的字符,包括换行符
        while (ch != '\n' && ch != EOF)
            ch = getchar();

        printf("%s\n", array);
    }

    return 0;
}

修复说明

  • 把原来嵌套的while (ch == ' ')改成if (ch == ' ')加continue,遇到空格直接跳过,不会读取后续的换行符并存入数组。
  • 保证只有非空格字符才会被处理并存入数组,避免了把换行符误存的情况,也就不会触发后续的getchar()阻塞。

如果需要跳过所有连续空格,可改用以下逻辑(用goto直接终止读取流程):

while ((ch = getchar()) != EOF && ch != '\n' && i < MAX_SIZE - 1)
{
    // 跳过所有连续空格,遇到换行或EOF直接终止读取
    while (ch == ' ') {
        if ((ch = getchar()) == EOF || ch == '\n') {
            goto end_read;
        }
    }

    // 大小写转换
    if (islower(ch))
        ch = toupper(ch);
    else if (isupper(ch))
        ch = tolower(ch);

    array[i++] = ch;
}
end_read:

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 14:30:28