Как написать собственную функцию 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 для 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); } 

Как насчет

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