我希望我的示例计算器程序在num1和num2上输入非整数时显示警报
我曾经尝试过,如果没有,就没有运气
switch(oper)
{
case '+':
cout<<"You entered addition "<<endl;
cout<<"Enter first number"<<endl;
cin>>num1;
cout<<"You entered "<<num1<<endl;
cout<<“Enter second number”<<endl;
cin>>num2;
cout<<“ You entered” <<num2<<endl;
cout<< num1+num2;
答案 0 :(得分:0)
答案似乎并不那么琐碎。有两种可能性。您尝试从流中提取一个整数。是否可以通过简单的布尔检查来检查。您可以在下面的示例中看到。
但是,如果输入1.2,则将提取整数1。结果也还可以。
如果您不想这样做,则应读取字符串并检查字符串是否与整数匹配。
因此,您可以测试字符串中的所有字符是否都是数字。可以使用std::all_of
进行测试。
如果要获得最大的灵活性,请使用正则表达式。
请参见下面的示例代码。
#include <iostream>
#include <string>
#include <regex>
#include <algorithm>
#include <cctype>
// Test program
int main()
{
int num{};
std::cout << "Enter a integer number:\n";
// If we can read any kind of integer
if (std::cin >> num) {
std::cout << "\nNumber "<< num << " entered!\n";
}
else {
std::cerr << "Error: Wrong data added\n";
}
// Really check if the format is an integer
std::string numString{};
std::cout << "Enter a integer number:\n";
// Read a string
if (std::cin >> numString) {
if (std::all_of(numString.begin(),numString.end(), [](char c){ return ::isdigit(c); })) {
num = std::stoi(numString);
std::cout << "\nNumber "<< num << " entered!\n";
}
else {
std::cerr << "Error: This is not an integer\n";
}
// Check, if a string matches exactly 1 integer with an std::regex
std::smatch integerMatch;
std::regex integer("\\d+");
if (std::regex_match(numString,integerMatch,integer)) {
num = std::stoi(numString);
std::cout << "\nNumber "<< num << " entered!\n";
}
else {
std::cerr << "Error: This is not an integer\n";
}
}
else {
std::cerr << "Error: Wrong data added\n";
}
return 0;
}