2016-08-31 3 views
0

Я пытаюсь читать цифры от неразделенного ввода символов в массив int. Пример ввода и вывода:Чтение цифр из незакрашенных символов в массив int в C

Input: 12a34b56 C7d8E9 
Output: [1,2,3,4,5,6,7,8,9] 

Вот моя попытка:

int check_digit (char c) { 
    if ((c>='0') && (c<='9')) return 1; 
    return 0; 
} 

int main(int argc, char const *argv[]) { 
    int numArray[1000], tempChar, c = 0; 

    tempChar = getchar(); 

    while (tempChar != EOF) { 
     if (check_digit(tempChar)) { 
      numArray[c] = tempChar - '0'; 
      c += 1; 
     } 
     tempChar = getchar(); 
    } 

    printf("["); 
    for (int i = 0; i < c-2; i++) { 
     printf("%d,", numArray[c]); 
    } 
    printf("%d]\n", numArray[c-1]); 

    return 0; 
} 

Это не работает должным образом. Он останавливается после прочтения одного символа.

Пример ввод и вывод:

Input: 1a3b5c7d9 

Output: [0,0,0,9] 

Desired output: [1,3,5,7,9] 
+0

Как насчет использования ['isdigit()'] (http://linux.die.net/man/3/isdigit)? –

+0

У меня такая же проблема. – user6005857

+0

Подождите .... 'i

ответ

2

У вас есть опечатка в коде

printf("%d,", numArray[c]); 

Должен быть

printf("%d,", numArray[i]); 

И цикл печати может быть просто

printf("["); 
for (int i = 0; i < c; i++) 
{ 
    printf("%d%c", numArray[i], (i<c-1)? ',' : ']'); 
} 
printf("\n"); 

Обратите внимание, что ваш код управляет только одним значком. Например. 45 управляется как 4 и 5.

+1

Да, это оно. Таким образом, сам массив был правильным, печать была неправильной. – user6005857

Смежные вопросы