急:关于c++中成员函数get

来源:百度知道 编辑:UC知道 时间:2024/05/18 09:56:22
书上有一个例子:
#include <iostream>
main()
{using namespace std;
char s;
do
{cin.get(s);
cout<<s;
}while(s!='\n');
cout<<"That is all."
}
目的是输入一行字符,程序回显它。而当我输入:Do be再按回车键,屏幕上又多了一行Do be。
我的理解是:get只能读取一个char型的字符,当第一次输入D时,后面紧跟cout<<s;应该立刻把D再输出呀!
但为什么等到输入完一行后屏幕才回显呢?书上还说换行符'\n'同时被读取和输出,由于它被输出,所以
That is all.另起一行。那么就是说get中换行符'\n'的输出也并不是指输出\n了,而是换一行,是吗?
可能我对get不理解。
请各位帮帮我,谢谢!!!

这个程序 真的能编译通过吗?
主函数的返回值都给省略了-_-#
cin是一个容器,装水的容器,你可以一次倒一桶水进去,然后一滴一滴的取出来, 也可以,一次全部抽出来..要把 '\n'这个字符放入到这个容器中,只有一个办法,那就是按回车,回车以后,C++内定,程序接收来自键盘的信息完毕,继续运行程序,
当你输入一条 abcdefg回车
首先,cin把全部的东西全部装了起来,这时候,你可以使使 cout<<cin.rdbuf()<<endl;你就能看见cin里面剩下的东西了..
cin.get(s);取出1个字符,放入s中,cin里面还剩下bcdefg
...

回车代表结束输入,并不能记录

get()接受回车符,所以,必须把回车过滤掉。

用 getchar()函数,可以实现

主要是系统默认回车是一个输入的结束。要是你愿意。
当然,用getchar函数的话,就可以一直读下去了,不过也是不会像说所说那样,你输入一个(不加回车,系统就立即输出)。因为你在进行输入的时候,实际上是系统产生了一个中断,而直到你输入结束符(如回车),中断才会返回,系统才会进行下面的操作。
不信的话,你可以试试在输入语句加上一个断点,然后输入一些字符,不输入回车,你看系统不会不往下运行~~

因为cin.get()有缓冲,即直到你输入回车后才会被整体处理
把你的程序改成
#include <iostream>
using namespace std;
main()
{
char s;
do
{cin.get(s);
cout<<s;
}while(s!='0');
cout<<"That is all.";
}

结果是
abcd //输入
abcd //上批输入被处理
351a089 //输入
351a0That is