为什么C中的getchar在循环中接受多个字符而不接受循环之外的字符

问题描述 投票:0回答:1

在以下程序中:

#include <stdio.h>

int main() {
    int c;
    c = getchar();
    putchar(c);
}

即使在输入中写入多个字符并按

enter
,也只会打印第一个字符。

但是在下面的程序中:

#include <stdio.h>

int main() {
    int c;
    
    c = getchar();
    while (c != EOF) {
        putchar(c);
        c = getchar();
    }
}

当我写多个字符时,它会打印所有字符。

我的问题如下:为什么当我按 Enter 时,它不像第一个程序那样只打印输入中的第一个字符,以及为什么在调用

putchar(c)
之前评估 while 中的条件?

c stdio getchar
1个回答
0
投票

输入是行缓冲的。当您输入字符并按 Enter 键时,缓冲区包含您输入的所有字符 +

'\n'
(新行)。

getchar
函数从该缓冲区中获取一个字符并返回它

  • 您的第一个程序从此缓冲区读取一个章程,打印它,然后终止。
  • 您的第二个程序正在循环从该缓冲区中一一获取字符,也包括新行
    '\n'
    字符。
© www.soinside.com 2019 - 2024. All rights reserved.