1. 程式人生 > >關於C++中輸入與變數型別不匹配的解決辦法

關於C++中輸入與變數型別不匹配的解決辦法

        在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);
}