2015-11-06 4 views
2
#include <stdio.h> 
#include <stdlib.h> 

int main(void) { 

    int a, b, checka, checkb; 

    printf ("enter a: "); 
    checka = scanf ("%d", &a); 

    printf ("enter b: "); 
    checkb = scanf ("%d", &b); 

    printf ("checka = %d\n", checka); 
    printf ("checkb = %d", checkb); 



    return EXIT_SUCCESS; 
} 

У меня была эта проблема в более крупной программе, но я написал быстрый тест, чтобы проверить, могу ли я исправить это, чего я не могу.c программа игнорирует все scanfs после ввода неправильного ввода переменной

В принципе, если для scanf введен ничего, кроме целого числа, программа просто мгновенно пропускает и игнорирует все остальные scanf и просто печатает остальную часть программы, которую видит, то есть я не могу выполнять проверки с циклом while, или я просто получаю бесконечный цикл, так как scanf в цикле для исправления переменной просто пропускается.

Очевидно, что если целые числа введены, эта конкретная программа просто вернет 1 для двух последних printfs, что ожидается. Что я делаю неправильно?

Спасибо!

+0

Это является причиной для проверки возвращаемого значения од 'scanf'. Это из-за причины. –

+0

Разве это не то, что я уже делаю? – Lewisss

+0

Нет, я не вижу никаких проверок здесь, вы просто печатаете результаты –

ответ

1

Существует причина, почему мы должны проверить зсапЕ на наличие ошибок, попробуйте следующее:

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

int main(void) { 

    int a, b, checka, checkb; 

    printf ("enter a: "); 
    if((scanf ("%d", &a)) == 1){ 
     checka = a; 
    }else{ 
     printf("Error(1)!"); 
     exit(EXIT_FAILURE); 
    } 


    printf ("enter b: "); 
    if((scanf ("%d", &b)) == 1){ 
     checkb = b; 
    }else{ 
     printf("Error(2)!"); 
     exit(EXIT_FAILURE); 
    } 

    printf ("checka = %d\n", checka); 
    printf ("checkb = %d", checkb); 

    return EXIT_SUCCESS; 
} 
+0

Спасибо! Я понятия не имел, что исходное scanf должно быть условием утверждения if, приветствия! – Lewisss

+1

@Lewisss Всегда проверяйте scanf (и его семью) на наличие ошибок. – Michi

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