我是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是否实际上由数字组成。谢谢
答案 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.com和cppreference.com之间的巨大差异。前者显示的信息很少,而后者则解释得更多。 cppreference为您提供了真正的提示:
如果ch的值不能表示为unsigned char且不等于EOF,则行为未定义
该函数期望[0,127]之间的值,您可以在链接的页面上看到数字int
由数字[48,57]表示。正如其他人所指出的那样,int
实际上是ASCII字符0123456789
。
108
您无法检查l
之类的数字,您必须检查每个数字。
答案 2 :(得分:2)
isdigit
使用int
值108
的字符表示形式,l
为{{1}},不是数字。
答案 3 :(得分:2)
函数原型isdigit()
int isdigit(int argument);
如果您将a=108
传递给该函数,则会将该值转换为等效的ASCII值并返回结果false
。因为108相当于'l'
而'l'
不是数字。
现在将a = 48
传递给该函数,因为48相当于char '0'
,现在该函数将return
true
。
答案 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...
}