getchar()在while循环中的行为

时间:2013-03-08 12:29:49

标签: c

int main()
{
int c;

  while ( (c = getchar())  != EOF)
    putchar(c);

}

现在,运行上述程序会产生

  

$。/ a.out thisisthelinewhosestoragelocationisamysterytome - LINE1   thisisthelinewhosestoragelocationisamysterytome - LINE2

当我输入 LINE1 的字符时,我认为函数getchar()和putchar()一直在处理字符,或者我错了吗?

这是我的问题。

点击回车后,我的 LINE1 完全复制到 LINE2 ,这意味着它应该在其他位置缓存 ,那么它存储在哪里?为什么这样实现呢?

3 个答案:

答案 0 :(得分:2)

在您输入整行之前,您的程序不会从shell接收输入。

答案 1 :(得分:2)

系统的默认行为是缓冲输入,直到它看到换行符,这样您就可以选择在程序看到它之前点击退格并对该行进行编辑。

答案 2 :(得分:0)

我将省略系统的I / O机制,以便为您的程序提供输入流并从中获取输出流。 (因为我不知道他们)

getchar()函数只是 stdin 中检索 一个字符。另一方面,putchar()只是将一个字符放入输出流( stdout )。因此,这里没有缓冲魔法,你只是得到了你期望得到的东西: stdout stdin 的完美副本。 / p>