do / while循环中的执行顺序

时间:2013-05-05 22:51:28

标签: get while-loop cout

我从Walter Savitch Absolute C ++书中直接看了下面的例子。它起作用(正如沃尔特萨维奇这样的学者所期望的那样)。但是,我很疑惑为什么我会在代码引用后解释:

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(符号)将一次找到一个字符,然后cout将输出这一个字符。然后,如果我的输入不是'\ n'字符,它将第二次进入循环,依此类推,直到最后输入等于'\ n'。

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

最后一点,可能说明显而易见:这个问题与某些不符合语法的代码无关。我只是对编译和/或执行上面提到的简单代码时会发生什么感到困惑。

希望有人可以帮助我!

感谢。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

看起来好像是立即处理,因为它是。循环正如你所写的那样继续 - 继续写字符,直到它符合行标记的结尾。它背后没有太多逻辑:)