Попытка разобраться с ошибкой пользовательского ввода в C - PullRequest
0 голосов
/ 15 декабря 2010

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

printf("Enter a value for x:   ");
while (scanf("%lf", &x_temp) != 1) {
    printf("ERROR: Input real number\n");
    printf("Enter a value for x:   ");
    scanf("%lf", &x_temp);
}

Но это просто проходит через цикл, не давая пользователю еще один шанс ввести другой номер:

user@user-vm:~/Desktop/Exercise_0$ ./a.out 
Enter a value for x:   a
ERROR: Input real number
Enter a value for x:   ERROR: Input real number
Enter a value for x:   ERROR: Input real number
Enter a value for x:   ERROR: Input real number
Enter a value for x:   ERROR: Input real number
Enter a value for x:   ERROR: Input real number
Enter a value for x:   ERROR: Input real number
Enter a value for x:   ERROR: Input real number
Enter a value for x:   ERROR: Input real number

У кого-нибудь есть идеи? Ура ребята

Ответы [ 3 ]

1 голос
/ 15 декабря 2010

Попробуйте это:

for (;;)
{
    printf("Enter a value for x:   ");
    if (scanf("%lf", &x_temp) == 1) 
        break;
    printf("ERROR: Input real number\n");
}
1 голос
/ 15 декабря 2010

Вы не используете возвращаемое значение второго scanf вызова в любом месте.Так что это, вероятно, успешно, но затем вы сразу же делаете еще один scanf в верхней части цикла, после того, как вход уже используется.

0 голосов
/ 15 декабря 2010

Я не уверен, что такое поведение, но, похоже, у вас есть дополнительный scanf (). Тот, который является частью условия while, будет повторяться каждый раз в цикле. Я не вижу необходимости во втором в нижней части цикла.

...