C++錯誤輸入的處理--整型錯誤輸入字串
阿新 • • 發佈:2019-02-02
在實際應用時,比如需要輸入一定範圍內的整數,本文分析如何處理錯誤的輸入資料
無錯誤處理示例:
#include <iostream>
using namespace std;
int main(){
int a;
do{
cout << "Input a number: " << endl;
cin >> a;
}while(a<1||a>9);//限制整數a的範圍 [1,9]
}
這時,如果我們輸入字元資料,會導致類似死迴圈的輸出”Input a number: “,程式崩潰
帶錯誤處理: 使用sscanf1
考慮到可以通過字元轉換的方式來處理錯誤資料,得到下面這種解決方法
有錯誤版
#include <iostream>
using namespace std;
int main(){
int a;
do{
char temp[100];
cout << "Input a number: " << endl;
cin >> temp;
sscanf(temp,"%d",&a);
}while(a<1 ||a>9);//限制整數a的範圍 [1,9]
}
這種方案下,大體上能解決輸入為字串出錯的問題,但是忽略了cin函式的用法。
cin在讀取字串的時候是遇到空格停止的,因此這裡為了獲取一行資料使用cin.getline2
修正版
#include <iostream>
using namespace std;
int main(){
int a;
do{
char temp[100];
cout << "Input a number: " << endl;
cin.getline(temp,100 );
int retnum = sscanf(temp,"%d",&a);
}while(retnum!=1 || a<1 || a>9);//限制整數a的範圍 [1,9]
}
解決了之前說的問題,同時利用sscanf的返回值進行了判斷,應該解決了數字錯誤輸入的問題