我正在创建自己非常简单的程序,允许用户输入数值。目前代码工作正常,但我需要验证if else语句。这就是我现在所拥有的;
#include <iostream>
#include <string>
using namespace std;
int main()
{
unsigned __int64 input = 0;
char str[] = "qwertyuiopasdfghjklzxcvbnm[]{};'#:@~,./<>?|!£$%^&*()";
cout << "Insert a number" << endl;
cin >> input;
if (input % 2 == 0)
{
cout << "Even!" << endl;
}
else
{
if (input% 2 == 1)
{
cout << "Odd" << endl;
cout << "Lets make it even shall we? " << "Your new number is... " << input + 1 << endl;
}
else if (isdigit(str[0]))
{
cout << "That isn't a number!" << endl;
}
}
system("pause");
return 0;
}
我遇到的问题是,如果用户输入的不是数字,则返回的值为“偶数”。
我希望你们和女孩们可以提供帮助! 约翰
答案 0 :(得分:4)
不要使用令牌提取(>>
)进行主要解析。提取失败后,您的主要输入将处于未指定状态,这很糟糕。相反,逐行读取输入,然后处理每一行。
此外,从不忽略输入操作的结果。这只是一个平坦的错误。
所以,把所有这些放在一起,这就是你如何处理这个问题:
#include <iostream>
#include <sstream>
#include <string>
int main()
{
for (std::string line; std::cout << "Input: " && std::getline(std::cin, line); )
{
std::cout << "We're parsing your line '" << line << "'\n";
int n;
std::istringstream iss(line);
if (iss >> n >> std::ws && iss.get() == EOF)
{
std::cout << "It was a number: " << n << "\n";
}
else if (line.empty())
{
std::cout << "You didn't say anything!\n";
}
else
{
std::cout << "We could not parse '" << line << "' as a number.\n";
}
}
std::cout << "Goodbye!\n";
}
请注意,所有输入操作(即>>
和getline
)都出现在直接布尔上下文中!