如何编写自己的isnumber()函数?

我是C的新手,我正在考虑如何自己编写这个函数。 我从命令行中获取一个参数,因此它存储在argv数组中,我想决定它是否是数字。 最简单的方法是什么?

谢谢

#include  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; } 

阅读strtol(3) 。 你可以用它作为

 bool isnumber(const char*s) { char* e = NULL; (void) strtol(s, &e, 0); return e != NULL && *e == (char)0; } 

但这不是很有效(例如对于具有数百万位的字符串),因为将进行无用的转换。

但实际上,您经常关心该数字的值,因此您将在程序参数处理中调用strtol (对argv参数),并关注strtol的结果,即strtol的实际值。

您使用strtol可以更新(通过其第三个参数)指向解析字符串中数字末尾的指针。 如果该结束指针不成为字符串的结尾,则转换以某种方式失败。

例如

 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); } 

怎么样

 #define MYISNUM(x) ((x) >= '0' && (x) <= '9') 

怎么样这样:

 #include  if(isdigit(input)) { return true; } else { return false; } 

更简单,如H2CO3评论:

  #define isnumber isdigit 

要么

 #include  #include  #include  int main () { //some code theChar = atoi(string[i]); if (isdigit(theChar)) { return true; } return 0; } 

我不确定你是否要检查它是数字还是数字而argv[1]的类型是char * not int所以你应该这样做:

 bool isDigit(char *param) { return (*param >= `0` && *param <= `9`) } bool isNumber(char *param) { while (param) { if (!isDigit(param)) return false; param++; } return true; }