编辑以下程序test.cpp
#include<iostream>
#include<string.h>
using namespace std;
int main(){
char buffer[1024];
while(true){
memset(buffer,0,sizeof(buffer));
cout<<"请输入字符"<<endl;
cin.get(buffer,sizeof(buffer));
cout<<"你输入的是:"<<buffer<<endl;
}
return 0;
}
编译运行
g++ test.cpp -o a.exe
a.exe
输入字符串“abc”后

无限循环
出现此问题的原因是cin.get()函数不接收回车字符,造成回车字符停留在缓冲区中。下次读取遇到回车字符会直接结束读取,如此一直循环。
在cin.get()语句后加上以下语句测试
cout<<getchar();

cout输出了getchar()函数得到的字符,为回车字符的ascii码10
对于此问题的解决办法是清空缓冲区中的内容
cin.clear();
cin.sync();
就可以正常的接受输入了

而对于cin也不接受回车字符,但是在没有输入字符前会略过缓冲区的回车和空白字符,因此一般不会造成无限循环的问题。但是cin遇到空格会结束,剩下的字符会停留在缓冲区在下一次被读取。而cin.get()遇到空格并不会结束读取。
对于c语言的输入输出函数,scanf函数也不接受缓冲区中的回车字符,而getchar()会接收回车字符并替换为'\0'