cin.getline问题

来源:百度知道 编辑:UC知道 时间:2024/05/23 00:20:30
#include<iostream.h>
#include<iomanip.h>
int main(){
char aLine[5];
cout<<"Enter a line of text and press Enter to end"<<endl;

cin.getline(aLine,sizeof(aLine));
cout<<aLine<<endl;
cin.clear();

cout<<"Enter a line of text and press Q to end"<<endl;
cin.getline(aLine,sizeof(aLine),'Q');
cout<<aLine<<endl;
return 0;

}先测试输入回车键结束,后测试输入Q结束,第一次有限制输入长度,可是如果输入超过长度,第二次就会不用输入直接显示,问下为什么,为什么第一次输入的后几个字条符会在第二次输入前进入aLine中?

输入语句是从输入流的缓冲器里读数据,每读一次移动缓冲器里的指针,表示读到的当前位置,下次从缓冲器里读数据就从指针位置开始读。所以第一次输入的东西,如果没有用完,下次读,就会读进前面一次的东西。

C 语言可以用 fflush 清除缓冲区,C++ 也应有相类似的 flush 函数可以清除缓冲区。两次读之间加入 flush 就可以避免 第一次输入的后几个字条符会在第二次输入前进入。 cin 可以用 cin.clear(); cin.sync();之类函数。

getline这种函数的设计思想一般是不流失信息,
也就是说即使限制了长度,然后输入长度超过限制了,
也采用不截取(即,把多余的部分放到下一次的内存中去)的处理方式。