關於C++中輸入與變數型別不匹配的解決辦法
阿新 • • 發佈:2019-01-29
在C++控制檯程式中,常常需要用cin輸入某個型別的變數,但是因為客戶可能輸入與變數型別不相符的情況。此時需要在處理資料前判斷輸入是否正確,不正確的時候重新輸入。
簡單的處理過程如下所示:
#include <iostream> using namespace std; int main() { int nFunc = -1; do { cout << "AAA: "; if (cin >> nFunc) { int n = 1; } else{ continue; } switch (nFunc) { case 1: cout << "111\n"; break; case 2: cout << "222\n"; break; default: break; } } while (nFunc!=0); }
以上程式碼的目的是,當輸入的不是整型數的時候(如輸入w),繼續迴圈,重新輸入nFunc。實際觀察可以看到,程式並不會給第二次輸入的機會,而是會不斷輸出AAA: 。
產生上述的原因我覺得應該是錯誤格式的w被一直放在輸入流中,導致每回cin都是取到w,然而w並不是我們要的int格式,所以一直輸出AAA。解決辦法是清空輸入流的資料。這裡如果用C的fflush(stdin)是沒有用的,應該使用C++的clear等方法。具體如下所示:
#include <iostream> using namespace std; int main() { int nFunc = -1; do { cout << "AAA: "; cin.clear(); // 重置 cin 輸入狀態 cin.sync(); // 清除 cin 緩衝區未讀取資訊 if (cin >> nFunc) { int n = 1; } else{ continue; } switch (nFunc) { case 1: cout << "111\n"; break; case 2: cout << "222\n"; break; default: break; } } while (nFunc!=0); }