cin.get(p) //p为char类型
while( cin.get(p) ){
if(p == ' ')
cout<<"是空格"<<endl;
else if(p == '\n'){
cout<<"是换行"<<endl;
}else if(p == '\r'){
cout<<"是回车"<<endl;
}else
cout<<"other charater"<<endl;
}
我想问一下:
上述代码运行时,输入一个字符串【不包括回车键】后,并没有输出任何信息,当按下回车后才将结果输出,我想知道这是怎么个原理,cin.get(p)不是只接收一个字符吗?为什么接受一个字符后并没有进入while循环?
[解决办法]
缓冲区 分为三种类型:全缓冲、行缓冲和不带缓冲。
1、全缓冲
在这种情况下,当填满标准I/O缓存后才进行实际I/O操作。全缓冲的典型代表是对磁盘文件的读写。
2、行缓冲
在这种情况下,当在输入和输出中遇到换行符时,执行真正的I/O操作。这时,我们输入的字符先存放在缓冲区,等按下回车键换行时才进行实际的I/O操作。典型代表是键盘输入数据。
3、不带缓冲
也就是不进行缓冲,标准出错情况stderr是典型代表,这使得出错信息可以直接尽快地显示出来。
[解决办法]
ch=cin.get();是第一次输入,因为是刚开始,所以没有回车保留在输入流的队列中.这时你输入一个字符,然后回车.get()收到回车或空格或制表符就停止输入了.此时,输入流队列中留下一个回车.