我有一個程序,簡單地計算阿克曼功能:CIN服用無效的輸入
#include <iostream>
// Ackermann function calculations
unsigned int ackermann(unsigned int m, unsigned int n){
if(m == 0)
return n+1;
if(n == 0)
return ackermann(m-1,1);
return ackermann(m-1,ackermann(m,n-1));
}
// Check for non-integer input
bool inputCheck(){
if(!std::cin.fail())
return false;
std::cout << "Invalid input!" << std::endl;
return true;
}
// Check for negative or overflow errors
bool numCheck(int i, char name){
if(i < 0){
std::cout << "Negative error!" << std::endl;
return true;
}
if(name == 'm' && i > 3){
std::cout << "Overflow error (m > 3)!" << std::endl;
return true;
}
if(name == 'n' && i > 12){
std::cout << "Overflow error (n > 12)!" << std::endl;
return true;
}
return false;
}
// Run input and num checks
bool check(int x, char y){
bool result = inputCheck() || numCheck(x, y);
std::cin.clear();
std::cin.ignore();
return result;
}
int main(){
int m, n;
bool valM, valN;
do{
std::cout << "m = ";
std::cin >> m;
valM = check(m, 'm');
} while(valM);
do{
std::cout << "n = ";
std::cin >> n;
valN = check(n, 'n');
} while(valN);
std::cout << "\nM = " << m << "\nN = " << n
<< "\n\nCALCULATING..." << std::endl;
std::cout << "A(" << m << ',' << n << ") = " << ackermann(m,n) << std::endl;
return 0;
}
大部分代碼是檢查無效的輸入。出於計算原因,m
不能大於3,並且n
不能大於12.它還檢查輸入是否爲負值。
已知問題:
如果用戶輸入類似
3z
。 cin只需要3並忽略z。顯然,3z
是不同於3
,我想檢測這種無效輸入。如果用戶輸入類似
1.2
的東西。 cin以1爲m,然後以n爲2。該計劃忽略了這段時間,並將其作爲兩個輸入,我想檢測這種無效輸入。
如何修改或修復我的代碼,以便它只需要正確的輸入?
你能解釋一下你應該爲''3z''發生什麼? 「z」代表什麼? – nathanesau
@nathanesau程序只能接受整數輸入。當輸入'3z'(或類似的)時,它忽略了'z'並且像'z'這樣不存在的'3'。從某種意義上說,我希望它能檢測到這樣一個無效的輸入(像'3z')。 – esote