我得到的代码应该检查用户输入是否为数字,但无论是否为数字,都会打印“false”。
if (isdigit(atoi(argv[1])))
{
printf("true");
}
else
{
print("false");
}
这就是我运行它的方式:
./ filename 2 3
答案 0 :(得分:1)
你混淆了不同的功能。
atoi()
(ASCII到整数)将字符串转换为int
。但是isdigit()
会检查单个字符,而不是int
。
您只需要isdigit((unsigned int) argv[1][0])
来检查字符串的第一个字符。
如果您想确保没有更多字符,请同时验证:
bool single_digit(const char *s)
{
return s != NULL && isdigit((unsigned int) *s) && s[1] == '\0';
}
然后致电
single_digit(argv[1]);
答案 1 :(得分:-1)
您不需要atoi
。而是将其强制转换为整数。
if (isdigit((int)argv[1]))
{
printf("true");
}
else
{
print("false");
}
另外,像这样运行:./filename 3
(即文件名后只有一位数,因为第二个将被忽略)。
最好的事情:检查man page isdigit
及其他类似方法:http://linux.die.net/man/3/isdigit