所以,我在Visual Studio 2012 Ultimate中使用getchar得到了一些奇怪的结果。这是我能够提出的最简单的例子,表明它不是代码错误,而且是其他的行动。
#include <cstdio>
int main(int argc, char* argv[]) {
char c = getchar();
putchar(c);
return 0;
}
然而,结果出现(在视觉上)在iostream库中有点像'cin'。 getchar返回一个字符(第一个),但是当我按下键时,它会在屏幕上显示字符,直到我按Enter键才会返回。我搜索了一下,并且真的找不到任何其他这种情况发生的事情,有没有人有任何关于这里发生了什么的线索?
答案 0 :(得分:1)
输入是行缓冲的,因此getchar
只会输入一次至少输入一行输入的字符。如果你没有结束该行但是在Linux上关闭输入^D
,我想在Windows上^Z
,那么你会看到它也会打印出第一个字符。
答案 1 :(得分:1)
标准输入通常是行缓冲的。这意味着系统将在输入缓冲区中输入字符时读取和存储字符,直到您输入完整的文本行。 getchar()
函数从该输入缓冲区中读取字符。
对于大多数用途,一次读取输入一行是更有意义的,然后在阅读后处理该行。
有一些方法可以一次立即输入一个字符,但它们是系统特定的(并且有点难看)。 comp.lang.c FAQ中的问题19.1对此进行了讨论。