我是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;
}

最佳答案

阅读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可以(通过其第三个参数)更新指向解析字符串中数字结尾的指针。如果该结束指针没有成为字符串的结尾,则转换以某种方式失败。
例如。
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);
 }

关于c - 如何编写自己的isnumber()函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19206660/

10-11 16:34