在学习《C++ Primer Plus》第六版第17章P785页的程序时遇到一个小问题,这个问题困扰了我很久,直到我找到了一篇博文http://www.cnblogs.com/tonglingliangyong/p/3908463.html,该问题是:
请看下面这个代码:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char str[20];
int num;
cout << "请输入:\n";
cin.get(str, sizeof(str));
cout << "str: " << str << endl;
cout << "请输入一个数:";
cin >> num;
cout << "num = " << num << endl;
return 0;
}
上述代码非常简单,但是存在一个Bug,就是如果我们在输入 str 的时候特意输入一个空行时,就会使num无法输入了,get()函数在读到空行的时候,会将换行符保留在输入队列,但同时会将cin的状态置为错误,并且如果此时代码中有while()循环时,cin的错误会一直持续,那样就会陷入死循环。我们可以用下面代码来捕获该错误:
#include <iostream>
#include <cs