int main()
{
int c;
while ( (c = getchar()) != EOF)
putchar(c);
}
现在,运行上述程序会产生
$。/ a.out thisisthelinewhosestoragelocationisamysterytome - LINE1 thisisthelinewhosestoragelocationisamysterytome - LINE2
当我输入 LINE1 的字符时,我认为函数getchar()和putchar()一直在处理字符,或者我错了吗?
这是我的问题。
点击回车后,我的 LINE1 完全复制到 LINE2 ,这意味着它应该在其他位置缓存 ,那么它存储在哪里?为什么这样实现呢?
答案 0 :(得分:2)
在您输入整行之前,您的程序不会从shell接收输入。
答案 1 :(得分:2)
系统的默认行为是缓冲输入,直到它看到换行符,这样您就可以选择在程序看到它之前点击退格并对该行进行编辑。
答案 2 :(得分:0)
我将省略系统的I / O机制,以便为您的程序提供输入流并从中获取输出流。 (因为我不知道他们)
getchar()
函数只是从 stdin 中检索 一个字符。另一方面,putchar()
只是将一个字符放入输出流( stdout )。因此,这里没有缓冲魔法,你只是得到了你期望得到的东西: stdout 中 stdin 的完美副本。 / p>