C++中輸入資料型別判斷,輸入型別錯誤後,提示使用者重新輸入直至其輸入正確
要求輸入number,但是使用者鍵入了字母A,仍然有結果,但是不正確,同時後面的程式碼自行運行了,沒有辦法去輸入string了。所以要改進,可以判斷輸入的是否為正確的資料型別
利用cin.good()和cin.fail()判斷:
cin.good()為true時,輸入的資料型別與定義的資料型別一致
cin.fail()為true時,輸入的資料型別與定義的不符。
利用if語句進行判斷:
if(cin.fail){
cin,clear();//clear,可重新輸入
}
用if語句判斷無法迴圈直至使用者輸入是對的資料。以下寫法只能修改一次,之後就pause了。
int main(){
int iInput;
cin>>iInput;
if(cin.fail()){
cout<<"Wrong, you have inputed a wrong type data\n"<<endl;
cin.clear();//清除錯誤標記,重新開啟輸入流,但是輸入流中依舊保留著之前的不匹配的型別
/*cin.sync();*///清楚cin快取區的資料。
while(cin.get() != '\n'){
continue;
}
cout<<"please input again"<<endl;
cin>>iInput;
}
return 0;
}
用while可以一直迴圈
int main(){
int iInput;
cin>>iInput;
while(cin.fail()){
cout<<"Wrong, you have inputed a wrong type data\n"<<endl;
cin.clear();//清除錯誤標記,重新開啟輸入流,但是輸入流中依舊保留著之前的不匹配的型別
/*cin.sync();*///清楚cin快取區的資料。
while(cin.get() != '\n'){
continue;
}
cout<<"please input again"<<endl;
cin>>iInput;
}
return 0;
}
改進
int main(){
int iInput;
cout<<"please input a number"<<endl;
while(!(cin >> iInput)){
cout<<"Wrong, you have inputed a wrong type data\n"<<endl;
cin.clear();//清除錯誤標記,重新開啟輸入流,但是輸入流中依舊保留著之前的不匹配的型別
/*cin.sync();*///清楚cin快取區的資料。
while(cin.get() != '\n'){
continue;
}
cout<<"please input again"<<endl;
}
cout<<"The number is: "<<iInput<<endl;
system("pause");
return 0;
}
輸入與預期格式不匹配反過來將導致表示式cin>>input的返回值為false,