問題:如果按照下述的代碼來檢查用戶的輸入是否合法,是不夠的,當輸入一個與期望不同的數據類型後,cin的狀態會變成fail,當下次執行cin會直接跳過,這樣就變成了死循環。
int a;
while (1)
{
cin >> a;
if (a > 10)
cout << "error" << endl;
else
cout << a << endl;
}
解決:先用cin.clear()將cin的狀態恢復初始態,再使用getchar()將緩存清空(必要的一步,使用getchar()可以在任何編譯器中實現而不用擔心函數的兼容性),具體做法如下:
int a;
while (1)
{
cin >> a;
if (a > 10)
{
cin.clear();
while (1)
{
if((a=getchar())=='\n')
break;
}
cout << "error" << endl;
}
else
cout << a << endl;
}
補充:
最進發現使用組合cin.clear()和cin.ignore()函數也可以(visual studio 2017)。