我是C的新手,我正在考虑如何自己编写这个功能。我从命令行中获取一个参数,因此它存储在argv数组中,我想决定它是否是数字。最简单的方法是什么?
谢谢
#include <stdio.h>
int isNumber(int *param)
{
if (*param > 0 && *param < 128)
return 1;
return 0;
}
int main(int argc, char *argv[])
{
if (argc == 2)
isNumber(argv[1]);
else printf("Not enought parameters.");
return 0;
}
答案 0 :(得分:3)
了解strtol(3)。您可以将其用作
bool isnumber(const char*s) {
char* e = NULL;
(void) strtol(s, &e, 0);
return e != NULL && *e == (char)0;
}
但这不是很有效(例如对于具有数百万位的字符串),因为将进行无用的转换。
但实际上,您经常关心该数字的值,因此您可以在程序参数处理中调用strtol
(argv
参数为main
)并关注strtol
的结果,即该数字的实际值。
您使用strtol
可以更新(通过其第三个参数)指向已解析字符串中数字末尾的指针的事实。如果该结束指针没有成为字符串的结尾,那么转换就会以某种方式失败。
E.g。
int main (int argc, char**argv) {
long num = 0;
char* endp = NULL;
if (argc < 2)
{ fprintf(stderr, "missing program argument\n");
exit (EXIT_FAILURE); };
num = strtol (argv[1], endp);
if (endp == NULL || *endp != (char)0)
{ fprintf(stderr, "program argument %s is bad number\n", argv[1]);
exit (EXIT_FAILURE); };
if (num<0 || num>=128)
{ fprintf(stderr, "number %ld is out of bounds.\n", num);
exit(EXIT_FAILURE); };
do_something_with_number (num);
exit (EXIT_SUCCESS);
}
答案 1 :(得分:0)
怎么样这样:
#include <ctype.h>
if(isdigit(input))
{
return true;
}
else
{
return false;
}
或更简单,因为 H2CO3 发表了评论:
#define isnumber isdigit
OR
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main () {
//some code
theChar = atoi(string[i]);
if (isdigit(theChar)) {
return true;
}
return 0;
}
答案 2 :(得分:0)
怎么样
#define MYISNUM(x) ((x) >= '0' && (x) <= '9')
答案 3 :(得分:0)
我不确定您是要检查它是数字还是数字而argv[1]
类型为char *
而不是int,所以您应该这样做:
bool isDigit(char *param)
{
return (*param >= `0` && *param <= `9`)
}
bool isNumber(char *param)
{
while (param)
{
if (!isDigit(param))
return false;
param++;
}
return true;
}