在c ++中使用isDigit()函数的正确方法

时间:2016-02-14 12:31:20

标签: c++

我是C ++的新手,我学习了一些C语言的基础知识。这是我的代码段。

#include "iostream"

using namespace std;

int main(){
int a=108;
if(!isdigit(a)){
    cout<<"The number is not a digit";
}
else
cout<<"It's a Number!";
}

我不知道为什么,但它满足条件。它应该输出,It's a Number!请纠正我,如果你有更好的解决方案,建议! (为了更清楚)我想检查输入的int是否实际上由数字组成。谢谢

5 个答案:

答案 0 :(得分:5)

首先,我不确定您是否意识到数字数字之间存在差异。数字是从0到9的单个字符,数字由数字组成。

其次,std::isigit有一个糟糕,令人困惑的遗留界面。正如documentation将告诉您的那样,它需要int,但要求其参数可以表示为unsigned char或EOF以避免未定义的行为。传递给函数的int表示单个字符;是否符合ASCII的映射不是C ++规定的,因此也是实现定义的。

尽管如此,您的C ++实现很可能使用ASCII或其超集。在ASCII中,108是小写字母“l”。因此isdigit返回false。

答案 1 :(得分:4)

我可以看到你的困惑来自哪里。 isdigit的原型表示它需要一个Json()参数;但是,类型JsonResult的所有参数都是数字,因此检查是没有意义的!

这时您可以看到cplusplus.comcppreference.com之间的巨大差异。前者显示的信息很少,而后者则解释得更多。 cppreference为您提供了真正的提示:

  

如果ch的值不能表示为unsigned char且不等于EOF,则行为未定义

该函数期望[0,127]之间的值,您可以在链接的页面上看到数字int由数字[48,57]表示。正如其他人所指出的那样,int实际上是ASCII字符0123456789

108

您无法检查l之类的数字,您必须检查每个数字。

答案 2 :(得分:2)

isdigit使用int108的字符表示形式,l为{{1}},不是数字。

答案 3 :(得分:2)

函数原型isdigit()

int isdigit(int argument);

如果您将a=108传递给该函数,则会将该值转换为等效的ASCII值并返回结果false。因为108相当于'l''l'不是数字。

现在将a = 48传递给该函数,因为48相当于char '0',现在该函数将return true

您还可以阅读thisthis教程了解更多信息。

答案 4 :(得分:0)

你正在使用isdigit错误,因为你在上面的答案中被告知它意味着与字符表示一起使用,以检查某个字符是否是数字。您可以查看此页面以获取有关isdigit的更多帮助:http://www.tutorialspoint.com/c_standard_library/c_function_isdigit.htm

您的问题 - 我想您正在尝试检查您发送的号码是否是一位数字。为此你可以做到:

if (a >= 0 && a <= 9){
    // a is a single digit...
}