0

我从 Walter Savitch Absolute C++ 书中直接摘取了以下示例。它有效(正如人们对 Walter Savitch 这样的学者所期望的那样)。但是,我很困惑为什么我将在代码引用后解释:

cout << "Enter a line of input and I will echo it:\n";
char symbol;
do
{
    cin.get(symbol);
    cout << symbol;
} while (symbol != '\n');
cout << "That's all for this demonstration.\n";

可能的输出如下所示:

Enter a line of input and I will echo it:
Do Be Do 1 2    34
Do Be Do 1 2    34
That's all for this demonstration.

我的问题如下。在只循环一次的情况下,cin.get(symbol) 将一次找到一个字符,然后 cout 将输出这个字符。然后,如果我的输入不是 '\n' 字符,它将第二次进入循环,依此类推,直到最后输入等于 '\n'。

但是,在执行代码时,所有输入似乎都被一次读取,然后一次复制回来。如果需要检查每个输入字符是否等于'\n',这怎么会发生?

最后一点,可能是显而易见的:这个问题与某种非语法的代码无关。我只是对上面介绍的简单代码的编译和/或执行过程中发生的事情感到困惑。

希望有人可以帮助我!

谢谢。

4

2 回答 2

0

你的观察是正确的。似乎所有输入被一次读取,然后一次打印出来。原因是当输出被打印时,它会进入一个缓冲区,实际上只有当缓冲区达到一定大小或代码全部完成时才会打印。在后一种情况下,输出流被关闭并被刷新。实际上,此代码正在打印,但已打印到缓冲区中。

于 2013-05-05T22:57:39.847 回答
0

Well it looks like it's gettings handled at once, because it is. The loop is going on exactly as you've written - keeps on writing the char until it meets the end of line mark. There isn't really much logic behind it :)

于 2013-05-05T22:58:15.950 回答