Очистка неверного ввода - PullRequest
0 голосов
/ 06 апреля 2019
do {
     printf("Enter endpoints of interval to be integrated (low hi): ");
     test = scanf("%lf %lf", &low, &hi);

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

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

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

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

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

1 Ответ

0 голосов
/ 06 апреля 2019

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

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

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

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

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

    if (test != 2) {
        badInput(low);
        badInput(hi);
        printf("Error: Improperly formatted input");
        int c;
        while((c = getchar()) != '\n' && c != EOF)  // <=== This loop read the extra input characters and discard them
            /* discard the character */;
    }
    ......
    ......
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...