c - 如何检查命令行中的输入是C中的整数?
问题描述
我希望检查命令行中输入的代码是整数。即 10b 无效。我试过 isdigit() 但不工作?提前致谢。
#include <cs50.h>
#include <stdio.h>
#include <ctype.h>
int main(int argc, string argv[])
{
if (argc == 2)
{
int key = atoi(argv[1]);
if (isdigit(key))
{
printf("Success\n\%i\n", key);
exit(0);
}
}
printf("Usage: ./caesar key\n");
return 1;
}
解决方案
函数isDigit
检查单个字符是否为数字,即在 之间的范围内'0'..'9'
。要检查字符串是否为数字,我建议使用 function strtol
。
long strtol(const char *str, char **str_end, int base )
将字符串转换str
为整数,并将指针设置为str_end
不再参与转换的第一个字符。如果您要求没有字符必须跟随您的数字,则str_end
必须指向字符串的结尾,即字符串终止字符'\0'
:
#include <stdio.h>
#include <stdlib.h>
int isNumber(const char* str) {
if (!str || *str=='\0') { // NULL str or empty str: not a number
return 0;
}
char* endOfNum;
strtol(str,&endOfNum,10);
if (*endOfNum == '\0') { // string is at its end; everything in it was a valid part of the number
return 1;
} else {
return 0; // something that is not part of a number followed.
}
}
int main() {
const char* vals[] = {
"10b",
"-123",
"134 ",
" 345",
"",
NULL
};
for (int i=0; vals[i]; i++) {
printf("testing '%s': %d\n", vals[i], isNumber(vals[i]));
}
}
输出:
testing '10b': 0
testing '-123': 1
testing '134 ': 0
testing ' 345': 1
testing '': 0
根据您的需要调整空字符串或 NULL 字符串等极端情况的含义。