2013-05-05 190 views
0

我从Walter Savitch Absolute C++书籍中直接看到了以下示例。它是有效的(正如人们期望的那样,像沃尔特萨维奇这样的学者)。不过,我很困惑,为什么我会在代码引用后解释:do/while循环中的执行顺序

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',怎么会发生这种情况?

最后一点,可能是明显的:这个问题并不涉及代码,它是某种方式不是语法的。我对编译和/或执行上述简单代码期间发生的事情感到困惑。

希望有人能帮助我!

谢谢。

回答

0

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

+0

谢谢!这说明了:) – Svalbard 2013-05-05 23:05:46

0

好吧,它看起来像是一次处理,因为它。循环完全按照你写的那样继续 - 直到满足行标记的末尾为止。没有多少逻辑:)