我正在尝试设置一个要求Age的基本程序,如果用户输入的数字小于99,它会说“完美”。如果数字超过99,它会说“你不能那么老,再试一次”。另外,如果用户输入的不是数字(如字母“m,r”或其他任何类似“icehfjc”),那么它会说“那不是数字。”
到目前为止,这是我的代码:
#include <iostream>
#include <string>
using namespace std;
int main()
{
int age;
backtoage:
cout << "How old are you?\n";
cin >> age;
if (age < 99)
{
cout << "Perfect!\n";
system("pause");
}
if (age > 99)
{
cout << "You can't be that old, Try again.\n";
system("pause");
system("cls");
goto backtoage;
}
Else
{
cout << "That is not a number, Please Enter a Valid Number\n";
system("pause");
system("cls");
goto backtoage;
}
}
我知道“Else”不起作用,因为C ++也将字母视为整数,所以 如果我写“m”,它将把它作为> 99的数字(因为“m”的整数值)因此显示“你不能那么老”的消息。但是如何解决此问题,以便在输入信件时程序显示“请输入数字”? (如果有人能修复代码并以有效的方式编写代码,我会 永远感激。)
非常欢迎任何建议,提示或提示。
答案 0 :(得分:6)
所以,如果我写“m”,它将把它作为> 99的数字(因为“m”的整数值)
不,“m”无法输入到int,cin
将失败。所以你应该做的是检查cin
的状态,例如
if (cin >> age) {
// ok
if (age < 99)
{
...
} else
{
...
}
}
else
{
// failed
cout << "That is not a number, Please Enter a Valid Number\n";
system("pause");
system("cls");
cin.clear(); // unset failbit
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // skip bad input
goto backtoage;
}
检查std::basic_istream::operator>>
的行为如果提取失败(例如,如果输入了预期数字的字母),则值保持不变,并设置failbit。
BTW:goto
在现代c ++编程中几乎已经过时了。用循环实现相同的逻辑应该很容易。
答案 1 :(得分:5)
您可以尝试它。它将在C ++中验证数字输入。如果输入有效,则
cin.good()
函数返回true
,如果输入无效则返回fase
。cin.ignore()
用于忽略其余部分 输入缓冲区,包含错误输入和cin.clear()
用来清除旗帜。
#include <iostream>
#include<string>
#include <limits>
using namespace std;
int main() {
backtoage:
int age = 0;
cout << "How old are you?\n";
cin >> age;
if(cin.good()){
if (age < 99){
cout << "Perfect!\n";
system("pause");
}
else if (age > 99){
cout << "You can't be that old, Try again.\n";
system("pause");
system("cls");
goto backtoage;
}
}
else{
cout << "That is not a number, Please Enter a Valid Number\n";
system("pause");
system("cls");
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
goto backtoage;
}
return 0;
}
<强>输入/输出:强>
How old are you?
k
That is not a number, Please Enter a Valid Number
How old are you?
120
You can't be that old, Try again.
How old are you?
10
Perfect!
答案 2 :(得分:0)
首先,如果用户可以输入“m”,k'或其他任何字符,我建议使用string
,然后如果要更改为数字,只需减去“0”,这样就可以了与数字一起工作,其次是程序员,通常不使用goto
语句,因为它可能是危险的,并且会使不良行为出现在您的程序中。
对不起,我的英语不好。
#include<iostream>
#include <string>
using namespace std;
int main()
{
string input;
getline(cin, input);
unsigned int lenght = input.size(),age=0;
for (int i = 0; i < lenght; ++i) {
if (input[i] >= '0' && input[i] <= '9') {
age = age*10+(int)input[i]-'0';
}
}
if (age > 99)
cout << "Nice try , you can`t be that old\n";
else
cout << "perfect!\n";
return 0;
}