Очистка неправильного ввода

#c

#c

Вопрос:

 do {
     printf("Enter endpoints of interval to be integrated (low hi): ");
     test = scanf("%lf %lf", amp;low, amp;hi);

     if (test != 2) {
        badInput(low);
        badInput(hi);
        printf("Error: Improperly formatted input");
     }

     else if(low > hi)
        printf("Error: low must be < hin");

} while ((test != 2 || low > hi));
  

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

Что мне нужно было бы поместить в функцию badInput , чтобы избежать этого?

Ответ №1:

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

scanf() Ожидает два двойных ввода от пользователя:

 test = scanf("%lf %lf", amp;low, amp;hi);
  

Когда вы вводите буквы вместо числа в качестве входных данных в scanf() , он не использует их, потому что они не соответствуют заданной строке формата, и оставляет их во входном буфере. Вы должны иметь в виду, что когда вы вводите буквы вместо цифр, scanf() должно быть возвращаемое 0 значение, потому что оно их не использует. Поскольку, scanf() не использует недопустимый ввод, на следующей итерации цикла scanf() найдите неиспользованный недопустимый ввод в буфере и снова пропустите их. Вот почему ваша программа не останавливается для ввода при вводе букв в качестве входных данных. Чтобы решить эту проблему, вы должны удалить неверный ввод из буфера. Вы можете сделать:

 do {
    printf("Enter endpoints of interval to be integrated (low hi): ");
    test = scanf("%lf %lf", amp;low, amp;hi);

    if (test != 2) {
        badInput(low);
        badInput(hi);
        printf("Error: Improperly formatted input");
        int c;
        while((c = getchar()) != 'n' amp;amp; c != EOF)  // <=== This loop read the extra input characters and discard them
            /* discard the character */;
    }
    ......
    ......