2016-10-13 2 views
0

При тестировании программы (на C) для предотвращения любых ошибок я щелкнул \ случайно, когда программа запросила целое число. Затем цикл while начинает сбой. Пример:Ввод неожиданного ввода приводит к сбою цикла (C)

int a; 
while(1){ 
    scanf("%d",&a);printf("%d\n",a); 
    a--; 
    if(a==0){break;} 
} 

Всякий раз, когда я ввожу число, он должен печатать одинаковое число. Но когда я набираю символ, он будет распечатывать все числа ниже предыдущего ввода, а затем начинает печатать все цифры ниже него до 1. Может ли кто-нибудь дать ключ к устранению этой проблемы? Большое спасибо.

Редактировать: Эта программа является всего лишь образцом ошибки, фактическая программа намного больше этого.

+2

Я бы посоветовал вам не использовать scanf. По крайней мере, проверьте его возвращаемое значение. –

+0

Какова цель вашей программы? Должно ли печатать значения ниже заданного числа, пока вы не достигнете 0? – user5478656

+0

@ user5478656 Эта программа просто печатает, что вы набрали до ввода 0. –

ответ

0

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

int a; 
    scanf("%d",&a); 
    printf("%d\n",a); 

Или, если вы хотите напечатать от входного числа до одного:

int a; 
while(1){ 
    scanf("%d",&a); 
    printf("%d\n",a); 
    a--; 
    if(a<=0){break;} 
} 

Использование a<=0 для сравнения, так как он не будет создавать бесконечный цикл, даже если вы ввели неправильный вход.

0

В этом случае вам не нужно.

int a; 
while(1){ 
    scanf("%d",&a); 
    printf("%d\n",a); 
    if(a==0) 
     break; 
} 
Смежные вопросы