1

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

4 回答 4

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

例如

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);
 } 
于 2013-10-06T08:00:46.053 回答
0

像这样尝试怎么样:

#include <ctype.h>

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

或者更简单的H2CO3评论:

 #define isnumber isdigit

或者

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main () {

  //some code
  theChar = atoi(string[i]);
  if (isdigit(theChar)) {
    return true;
  }
  return 0;
}
于 2013-10-06T08:03:17.183 回答
0

怎么样

#define MYISNUM(x) ((x) >= '0' && (x) <= '9')
于 2013-10-06T08:07:14.857 回答
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;
} 
于 2013-10-06T08:24:09.617 回答