为什么在使用 getchar 输入时 putchar 不返回新行?

Why is putchar not returning a new line when entered with getchar?

在 Linux 上使用 Clang/GCC 和 运行 进行编译:

当运行以下代码时,我遇到了对我来说意想不到的行为:输入单个字符时("X")我将被提示输入另一个字符("Y")大概是因为缓冲区未满。当我输入第二个字符 ("Y") 时,putchar 只显示第二个字符 ("Y" - 它既不是 returns 第一个 "X" 也没有任何新的 lines/line休息)。我认为这是因为 putchar 正在从头到尾读取流并将缓冲区读取为“[NEW LINE] Y [NEW LINE]”并且原始 "X" 已经超出了为三个变量。但是这种从流的结尾到开头的读取似乎与 putchar 的通常行为不一致 - 如果我输入四个字符 "XYZA" 并按回车键,它 returns 从头到尾的流,可以理解的截断:"XYZ".

我的第一个问题是我上面的假设是否正确,我的第二个问题是:如果是这样,为什么 putchar 不输出可能在缓冲区中的新行。如果我得到“[NEW LINE] Y [NEW LINE]”作为输出,我会很清楚发生了什么,但我只得到 "Y"。这是为什么? putchar trim 是白色 space 元素,还是 getchar 以某种不会转换为转义序列字符的方式读取新行?

我已经尝试了多种使用 enter 键的组合,但没有看到它是如何工作的。我想知道它在做什么。

int main() {
    int a,b,c;

    printf("Type three letters: ");

    a = getchar();
    putchar(a);
    b = getchar();
    putchar(b);
    c = getchar();
    putchar(c);
}

当运行以上:

stdin 通常是行缓冲的。在输入 '\n' 之前,不会向第一个 getchar() 提供任何内容。

另外'\n'是输入的字符之一。