2013-11-20 21 views
1

Мне нужна небольшая помощь с моей программой, чтобы получить действительное целое число. Я написал код, который отлично работает, но если я вхожу, например, в 453F, он должен отображать «Invalid int», но мой вывод равен 453. Кажется, он не проверяет последний int, но я не знаю, как сделать он проверяет и отображает как недопустимый ввод. Вот мой код:Проверить действительное целое число

int main() 
{ 
    int x; 
    getInteger(x); 
    return 0; 
} 

int getInteger (int x) 
{ 
    float check; 

    printf ("enter a integer number: \n\n"); 
    scanf ("%f", &check); 
    x = check; 
    if (x == check) 
    { 
    printf("\nYour number is %d", x); 
    } 
    else 
    { 
     printf("\nThis is not an integer number, please insert an integer!\n\n"); 
    } 
    getch(); 
} 

ответ

0

Возможно, вам необходимо прочитать значение в виде строки, а затем использовать, например, strtol, чтобы преобразовать его в целое число с проверкой ошибок.

Можно сделать так:

char str[64]; 

scanf("%63s", str); 

char *endptr; 
int value = (int) strtol(str, &endptr, 10); 

if (endptr == str) 
    printf("Not a valid integer\n"); 
else if (*endptr != '\0') 
    printf("Valid number, but followed by non-numeric data\n"); 
else 
    printf("A valid number: %d\n", value); 

Ваш случай с 453F в качестве входных данных вызовет вторую строку, которая будет напечатана в приведенном выше коде.

+0

Спасибо за помощь! strtol отлично работает! – user2884834

0

Ну, вот как работает scanf - он будет соответствовать тому, что он может, и он оставит F во входном буфере.

Другим способом было бы считывать строковое значение (используя спецификатор формата %s), который будет принимать все символы, а затем вы можете использовать strtof (вы можете найти много примеров, как его использовать), чтобы преобразовать его в float с проверкой ошибок ,

0

Вы можете прочитать как строку и проверить (char by char) значение ascii, которое находится в правильном диапазоне (48-57).

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