2015-10-29 3 views
-1

Я боролся с проектом, поэтому мне нужно проверить количество 4 цифр на C, я думал об использовании символов, так как мне нужно проверить 0001, но нет 1. Тогда, я думаю, мне нужно чтобы преобразовать это в целое число для работы с ним. Кто-нибудь может мне помочь?Проверка длины цифр и числа

printf("Enter a number 0 to end:"); 
gets(str); 
while (strcmp(str, "0")) 
{ 
    j = 0; 
    k = 0; 
    flag = 0; 
    while (*(cad + j)) { 
     if (!isdigit(*(cad + j))) 
      flag = 1; 
     j++; 
     k = ++; 
    } 

    if (!flag && k == 4) { 
     i = atoi(cad); 
     q = newnode(); 
     q->num = i; 
     stack(&pi,q); 
    } 
    else 
     printf("Wrong number"); 
    printf("Enter a number 0 to end:"); 
    gets(str); 
} 
+2

Йор код был нечитаемым. И не используйте 'gets()' он устарел. Вы читали, что делает 'strcmp()' делает? –

+0

Эта часть 'мне нужно проверить 0001, но нет 1.' для меня непонятно. можете ли вы привести пример, который показывает, где он должен завершиться неудачно и где он должен быть успешным? – milevyo

+0

, если вы введете 1, должно быть недействительным, если вы введете 0001 shoudl, чтобы быть допустимым, поэтому я использую строку char для проверки числа по номеру –

ответ

0

Я думаю, что вы хотите, это

#include <stdio.h> 
#include <stdlib.h> 

int 
is_valid_number(const char *const string, int *value) 
{ 
    char *endptr; 
    *value = strtol(string, &endptr, 10); 
    return (((endptr - string) == 4) && (*endptr == '\0')); 
} 

int 
main(void) 
{ 
    int value; 
    const char *string = "001"; 
    if (is_valid_number(string, &value) != 0) 
     fprintf(stdout, "it's valid: %d\n", value); 
    else 
     fprintf(stdout, "\033[31mINVALID\033[0m\n"); 
    return 0; 
} 
+0

'is_valid_number (" 0 ", ...)', 'is_valid_number (" - 123 ", ...)' будет проходить. – chux

+0

@chux хорошее наблюдение, но давайте посмотрим, сможет ли OP работать отсюда ... Потому что просто 'if (... <0)' будет делать. –

0

OP на правильном пути (кроме gets())

char str[50]; 
fputs("Enter a number 0 to end:", stdout); 

while (fgets(str, sizeof str, stdin) != NULL)) { 
    str[strcspn(str,"\n")] = '\0'; // lop off potential trailing \n 
    if (strcmp(str, "0") == 0) { 
    break; 
    } 
    #define N 4 
    int all_digits = 1; 
    for (int j = 0; j<N; j++) { 
    if (!isdigit((unsigned char) str[j])) { 
     all_digits = 0; 
     break; 
    } 
    } 
    if (all_digits && str[N] == '\0') { 
    i = atoi(str); 
    ... 
    } 
    else 
    fputs("Wrong number", stdout); 
    ...