我希望我的示例计算器程序在num1和num2上输入非整数时显示警报

时间:2019-07-25 07:18:35

标签: c++

我希望我的示例计算器程序在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;

1 个答案:

答案 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;
}