1. 程式人生 > >C++中輸入資料型別判斷,輸入型別錯誤後,提示使用者重新輸入直至其輸入正確

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,