1

所以,我在 Visual Studio 2012 Ultimate 中使用 getchar 得到了一些奇怪的结果。这是我能想出的最简单的例子,它表明它不是代码错误,而是其他东西在起作用。

#include <cstdio>

int main(int argc, char* argv[]) {
    char c = getchar();
    putchar(c);
    return 0;
}

然而,结果出来(视觉上)有点像 iostream 库中的“cin”。getchar 按原样返回一个字符(第一个字符),但是当我按下键时,它会在屏幕上显示字符,并且在我按 Enter 之前不会返回。我搜索了一下,并没有真正找到任何其他发生这种情况的案例,有没有人知道这里发生了什么?

4

2 回答 2

1

输入是行缓冲的,因此getchar只有在至少输入一行输入时才会采用一个字符。如果你不结束这一行,而是^D在 Linux 上关闭输入,我猜^Z在 Windows 上,那么你会看到它也会打印第一个字符。

于 2013-04-25T01:19:19.433 回答
1

标准输入通常是行缓冲的。这意味着系统将在您在输入缓冲区中键入字符时读取并存储字符,直到您输入一整行文本。该getchar()函数从该输入缓冲区中读取字符。

对于大多数目的,一次读取一整行输入更有意义,然后在您阅读后处理该行。

有一些方法可以一次立即输入一个字符,但它们是系统特定的(而且有点难看)。comp.lang.c FAQ中的问题 19.1讨论了这一点。

于 2013-04-25T01:21:12.737 回答