2016-03-10 3 views
-1

Этот фрагмент кода постоянно печатает «Введите значение массива: вводятся только числовые значения» при вводе буквы. Я не понимаю, почему он не просто печатает один раз, и продолжает принимать ввод. В идеале пользователь повторно вводит один или весь набор значений, поэтому использование команды break, которая только выходит из цикла, не является идеальным. Любые слова совета будут высоко оценены.troubeshooting Почему секция кода застревает в цикле

#include <stdio.h> 
#include <string.h> 

int main(void) 
{ 
int i, value, containsValues[5]; 

for(i=0; i<=4;) { 
    printf("Enter array value: \n"); 

    if (scanf("%d", &value) !=1) 
    { printf("Only numeric values can be entered \n");} 
    else 
    {containsValues[i] = value; 
    ++i;} 
} 

return 0; 
} 

Редактировать: Сохраняется ли письмо в буфере, что приводит к такому поведению? Если да, то какие советы по очистке буфера?

+0

Совет отладки: напечатайте содержимое переменных 'i' и' value'. Также проверьте возврат 'scanf()' – Coconop

+0

спасибо за подсказку! Но даже когда я приращения, пользователь не может повторно вводить ввод больше советов ?? –

ответ

0

Он вступил в бесконечный цикл, потому что вы не сломались с недопустимым вводом - индекс i так и не был увеличен.

Поместите break для недопустимого ввода:

if (scanf("%d", &value) !=1) 
{ 
    printf("Only numeric values can be entered \n"); 
    break; 
} 
+0

Я попытался помещать перерыв, но это предотвращает дальнейший ввод, так же как и изменения, где происходит приращение к i в цикле for. Оба прекращают спам, но я хотел бы, чтобы пользователь смог повторно ввести значение –

1

Вы должны очистить буфер ввода после неправильного ввода, используйте этот for цикл: это петли, пока правильное значение не введено

for (i = 0; i <= 4;) 
{ 
    printf("Enter array value: \n"); 
    if (scanf("%d", &value) != 1) 
    { 
     printf("invalid input\n"); 
     fflush(stdin); 
     continue; 
    } 
    containsValues[i] = value; 
    ++i; 
} 
+1

спасибо, так много я осознал свою ошибку и поставил подлый скаффикс там, чтобы впитать недопустимый вход !! –

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