無効な入力を取って、私は単にアッカーマン関数を計算するプログラムを持っている:コードの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はmに1を、nに2をとります。プログラムは、期間を無視して2つの入力として受け取り、そのような無効な入力を検出したいと思います。
正しい入力のみになるようにコードを修正または修正する方法を教えてください。
'' 3z''で何が起こっているのか説明できますか? '' z''はどういう意味ですか? – nathanesau
@nathanesauプログラムは整数入力のみを受け入れる必要があります。 '3z'(または類似)が入力されると、zが無視され、zが存在しないように' 3'をとります。ある意味では、私はそのような無効な入力( '3z'のような)を検出したい。 – esote