getchar()的行为是否不正常?

getchar()的行为是否不正常?,c,windows,getchar,C,Windows,Getchar,所以,我在VisualStudio2012 Ultimate中使用getchar得到了一些奇怪的结果。这是我能想到的最简单的例子,它表明这不是一个代码错误,而是其他一些正在发生的事情 #include <cstdio> int main(int argc, char* argv[]) { char c = getchar(); putchar(c); return 0; } #包括 int main(int argc,char*argv[]){ char

所以,我在VisualStudio2012 Ultimate中使用getchar得到了一些奇怪的结果。这是我能想到的最简单的例子,它表明这不是一个代码错误,而是其他一些正在发生的事情

#include <cstdio>

int main(int argc, char* argv[]) {
    char c = getchar();
    putchar(c);
    return 0;
}
#包括
int main(int argc,char*argv[]){
char c=getchar();
普查尔(c);
返回0;
}

然而,结果(视觉上)有点像iostream库中的“cin”。getchar返回一个字符(第一个),但当我按下键时,它会在屏幕上显示字符,直到我按下enter键才返回。我已经搜索了一段时间,没有发现任何其他发生这种情况的案例,有人知道这里发生了什么吗?

输入是行缓冲的,所以
getchar
只会在至少键入一行输入后接受一个字符。如果您不结束行,而是在Linux上关闭输入
^D
,我想Windows上的
^Z
,那么您会看到它也会打印第一个字符。

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

在大多数情况下,一次读取一整行输入,然后在读取后处理该行更有意义


有很多方法可以一次直接输入一个字符,但它们是特定于系统的(而且有点难看)。中的问题19.1对此进行了讨论。

这很好地回答了这个问题。谢谢