经常看到类似下例的问题:
int main()
{
char buf1[5]={0};
char buf2[5]={0};
cin >>buf1;
cin.getline(buf2,5); // 这里似乎不等待输入
return 0;
}
而解决办法如下:
int main()
{
char buf1[5]={0};
char buf2[5]={0};
cin >>buf1;
cin.ignore(); // 或者 cin.sync(); 之类的
cin.getline(buf2,5);
return 0;
}
这是为什么呢?
因为,首先, Windows 上敲一下回车键,实质上是输入两个字符:回车符,紧跟着换行符。这两个字符的 ASCII 码分别为 0x0D 和 0x0A,一般来说,其C++转义表示分别为 '\r' 和 '\n'。然后,cin>> 默认是以一个或多个接连的白空格为间隔,cin.getline 默认则以单个换行符(0x0Aÿ