2016-12-14 4 views
1

Я не могу получить isdigit для работы. Вот некоторые из моего кода.Почему isdigit всегда возвращает false?

void input(int *array, int size) { 
    int x; 
    printf("Give me ten numbers. \n"); 
    for (int i = 0; i < size; i++) { 
     do { 
      printf("Array[%d]: ", i); 
      scanf("%d", &x); 
      scanf("%*[^\n]"); 
     } while (!isdigit(x)); 
     array[i] = x; 
    } 
} 

Целью этой программы является чтение целого числа от клавиатуры с scanf (который не является проблемой). Если вход не является числом, он должен повторить цикл while, пока пользователь не даст номер. С isdigit вы сможете определить, является ли символ целым числом или нет. Он возвращает 1, если целое число, 0, если нет. По крайней мере, так должно быть. В этом коде он всегда возвращает 0.

+2

Что значит "не работает" значит, тебе? Опишите результат и ожидаемый результат. Кроме того, помните, что I/O может fai: вы должны проверить возвращаемое значение 'scanf()'. – unwind

+0

Какова цель данного кода? – RoadRunner

+0

Вопросы поиска справки по отладке («почему этот код не работает?») Должны включать в себя желаемое поведение, конкретную проблему или ошибку и кратчайший код, необходимый для воспроизведения в самом вопросе. Вопросы без четкого описания проблемы не полезны другим читателям. См.: Как создать минимальный, полный и проверенный пример. – Olaf

ответ

0

Я не понимаю, что вы пытаетесь сделать. Во-первых, если вам нужно целое число в charachter следует оставить значение «0» так

c-'0'. 

Тогда вместо того, чтобы использовать зсапЕ, если вы должны просто получить charachter гораздо лучше GetChar() промывать только

while(getchar()!='\n') 
       ; 

Чем бы вы не хотели использовать надлежащее scanf ("% d", & int_variable); вам нужно построить функцию для восстановления номера, это означает взять charachter, оставить «0» и умножить на десять на каждый следующий charachter.

-1

Sweet проблема !! isdigit принимает аргумент одного символа (значение ASCII) и определяет, является ли символ цифрой или нет. [так что это будет работать для цифры сигнала].

сначала, как isdigit принимать аргумент одного символа, если вы передадите цифру в качестве аргумента, тогда он скажет: «НЕТ, НЕ НОМЕР». Вы должны передать значение ASCII одноразрядного числа в качестве аргумента isdigit.

Я имею в виду, '1'! = 1

'1' равно 1 + '0', который является ASCII значение символа '1'.

Решение 1: [Она будет работать на одну цифру]

void input(int *array, int size) { 
    printf("Give me ten numbers. \n"); 
    for (int i = 0; i < size; i++) { 
     int x; 
     do { 
      x = 'a'; //bcz if user enter a character, scanf will not able to take the value, so, x will hold the previous value 
      printf("Array[%d]: ", i); 
      scanf("%d", &x); 
      scanf("%*[^\n]"); // fflush does not work on Macs. This is an alternative. [I don't know about the line, I copied from you.] 
     } while (!isdigit(x+'0')); //converting the value to character 

     array[i] = x; 
    } 
} 

Решение 2: (для про): р код однолинейной :)

void input(int *array, int size) { 
    printf("Give me ten numbers. \n"); 
    for (int i = 0; i < size; i++) { 
     while(printf("array[%d] = ",i) && !scanf("%d",&array[i]) && !scanf("%*[^\n]")); // it will give same result. 
    } 
} 
+0

Решение 1. добавлено. –

+0

Решение 2 добавлено –

+0

Сообщите мне, что у вас есть это или нет, и если вы его получили, отметьте pls как accept as ans. :) –