有关C++成员函数get()的问题,我不理解:(

来源:百度知道 编辑:UC知道 时间:2024/06/06 05:16:15
我不理解这个程序到底是怎么执行的,我觉得很奇怪。
请先看这个程序:
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 is all for this demonstration.";

结果显示为:
Enter a line of input and I will echo it:
Do Be Do 1 2 34
Do Be Do 1 2 34
That is all for this demonstration.

其中第一行Do Be Do 1 2 34是用户输入的,第二行是回显的.
我觉得,当输入第一个D时,应该把D存入了变量symbol,紧接着cout << symbol;应该立即输出D,其他字母应该也是这样呀!为什么输入完一行字符之后才会回显一行字符而不是一个一个字符回显?
请知道的人详细告诉我这个程序是如何执行的?为什么不是我想的那样执行的?谢谢各位!

因为对于cin.get来说,只有当按下回车以后,才视为输入完成。所以输入是"Do Be Do 1 2 34",在那个do循环中,cin.get每次读取一个字符并输出,所以就是你看到的结果。
可以这样改一下:
do
{
cin.get(symbol);
cout << symbol;
} while ( symbol != '1' );
这样输出就是Do Be Do 1
虽然输入流中还有字符,但因为do循环已经结束,就无法再读取了。

cin把你输入的内容放入缓冲区,按下回车后get()才从缓冲区读取数据

cin.get()是遇到回车符才会结束输入。没有遇到回车符,cin.get()会一直等待输入。

cin 是个自己的结构体不!!!