解決cin因爲輸入錯誤的數據類型進入死循環的問題

問題:如果按照下述的代碼來檢查用戶的輸入是否合法,是不夠的,當輸入一個與期望不同的數據類型後,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)。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章