2013-12-02 2 views
0

Я понятия не имею, почему isdigit() и isalpha() продолжают делать это. Независимо от того, как я их использую, они всегда возвращают 0. Я использую их неправильно или мой компилятор действует?isalpha() и isdigit() всегда возвращаются 0

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

//example of isdigit not working, it ALWAYS returns 0 no matter what the input is. 
int main() 
{ 
    int num=0; 
    int check=0; 

    printf("Enter a number: "); 
    fflush(stdin); 
    scanf("%d",&num); 
    //Just checking what value isdigit has returned 
    check=isdigit(num); 
    printf("%d\n",check); 
    if(check!=0) 
    { 
     printf("Something something"); 
     system("pause"); 
     return 0; 
     } 
    else 
    { 
     system("pause"); 
     return 0; 
     } 
} 
+2

Конечно, вы их используете неправильно. '0' не' '0'',' 1' не '' 1'' и т. Д. –

+0

scanf ("% d", &num); => scanf ("% c", & digit); – Jekyll

ответ

1

isdigit действует на междунар, но он должен быть символ расширенной к междунар. Вы читаете число и преобразуете его в двоичное представление, поэтому, если ваше inout не соответствует значению, соответствующему 0 - '9` (т. Е. 0x30 - 0x39), в результате вы получите false.

Если вы хотите использовать isdigit() вы должны использовать его на отдельные символы из строки пользователь вводит как число, так что вы должны использовать %s или %c для однозначных цифр, и цикл через строку.

Пример:

char c; 
scanf("%c",&c); 
check=isdigit(c); 

или (быстрый и грязный пример)

char buffer[200]; 
if (scanf("%s", buffer) > 1) 
{ 
    int i; 
    for(i = 0; buffer[i] != 0; i++) 
    { 
     check=isdigit(buffer[i]); 
    } 
} 
+0

Не могли бы вы дать мне пример того, как это будет сделано, я новичок в программировании, чтобы это помогло. – user3047289

1

Изменить ваш scanf ("%d"...) с зсапЕ ("%c"...) и определения num от int к char. Вы можете также изменить имя переменной, так как isalpha() и isdigit() не работают с «номерами», но с «ASCII кодов символов» (которые на самом деле числа), и оперативное сообщение от "Enter a number" к "Enter a character"

0

Вы должны пройти число символов по символам isdigit. Заменить спецификацию %d на %c в scanf. А также удалить строку

fflush(stdin); 

может вызывает неопределенное поведение (если вы не в MS-DOS).

0

Вы хотите проверить символ, а не номер. 0 и '0' - не то же самое. Первый - integer, второй - character. Изменение на этом:

char character =0; 
    int check = 0; 

    printf("Enter a number: "); 

    scanf("%c", &character); 
    printf("%d\n",character); 

    check = isdigit(character); 
    if(check != 0) { 
     printf("Something something\n"); 
     return 0; 
    } 
    else{ 
     return 0; 
    } 

В действии:

Enter a number: 5 
53 # ASCII code of 5 
2048 
Something something 

Enter a number: a 
97 #ASCII code if a 
0 

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

  • Нет связанных вопросов^_^