3
int main()
{
int c;

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

}

现在,运行上面的程序会产生

$./a.out 这是存储位置是神秘典籍的线路 -- LINE1 这是存储位置是神秘典籍的线路 -- LINE2

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

这是我的问题。

在我按回车后,我的LINE1与LINE2完全复制,这意味着它应该在其他地方缓冲,那么它存储在哪里?另外为什么要这样实现?

4

3 回答 3

2

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

于 2013-03-08T12:35:39.580 回答
2

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

于 2013-03-08T12:40:37.880 回答
0

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

getchar()函数只是从stdin中检索 一个字符。另一方面,只需将一个字符放入输出流(stdout)。因此,这里不涉及缓冲区魔术,您只是得到了您期望得到的东西:在stdout中放入stdin的内容的完美副本。putchar()

于 2013-03-08T13:42:58.577 回答