c++ :检查它是否是类中的数字

c++ : check if it is a Number in class

提问人:Saeed Kiarsi Zadeh 提问时间:1/9/2020 更新时间:1/9/2020 访问量:308

问:

在这段代码中,我想知道两个数字是 Int 还是 String:

#include <iostream>
using namespace std;

class calculate{
    private:
        bool checkNumbers(int num1, int num2){
            if(isdigit(num1) && isdigit(num2)){
                return true;
            }else{
                return false;
            }
        }

public:
    void sum(int x, int y){
        bool chek=checkNumbers(x, y);
        if(chek==true){
            cout<< "yes it is Number"<< endl;
        }else{
            cout<< "Nope! String"<<endl;
        }
    }
};

int main()
{
    calculate calulate;
    calulate.sum(3, 2);
    return 0;
}

但是在运行代码后,我只看到 Nope! 字符串,表示它是字符串。谁知道出了什么问题? 我用 isdigit 检查了数字,我只发送了两个数字

calulate.sum(3, 2);

但什么都没有!! 谢谢

C++

评论

1赞 Igor Tandetnik 1/9/2020
isdigit(2)是假的。 是真的。我不清楚你在这里想做什么,以及与此有什么关系。比如说,你能举一个你希望你的程序打印的例子吗?isdigit('2')isdigit"Nope! String"
0赞 Saeed Kiarsi Zadeh 1/9/2020
@IgorTandetnik 我只想做一个练习,它是一个用类计算。 对于从 main 发送到 calculate.sum 函数的第一个数字,在这个函数中,我想从私有函数 calculate.checkNumbers 中检查输入(实际上在此代码中它是静态的,但也许我想从用户那里获取数字),如果用户向程序发送字符,则显示错误。
0赞 Saeed Kiarsi Zadeh 1/9/2020
这是我的错误:calulate.sum('3', '2');
0赞 PaulMcKenzie 1/9/2020
@user2215032 -- 如果字符数超过一位数怎么办?

答:

2赞 alteredinstance 1/9/2020 #1

您的问题在于您使用std::isdigit(int)

该函数旨在检查 a 是否等效于 10 个表示的十进制数字之一。但是,此函数仅适用于 48-57 的值。intchar0123456789int

int应为 .如果你想让它解析,请使用 48-57、where is 、is 等...chartrue480491

请注意,如果你给它传递一个像'3'这样的函数,你的函数会自然地解析为true,就像一位评论者所说的那样。这是因为.charchar(3) == int(51)

例如:

isdigit('1'); // This is true, because '1' is a "char" digit
isdigit(49); // This is true

isdigit(1); // This is false
isdigit(60); // This is false
0赞 Olaf Dietsche 1/9/2020 #2

num1并被 std::isdigit 解释为字符。通常,这意味着 ASCII 字符num2

作为 ASCII 字符,2 和 3 是控制字符,而不是数字,它们位于“0”(0x30)到“9”(0x39)的范围内