Проверка ввода зацикливается - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Есть одна функция ввода:
void input( double *d, double *x, double *y ) {
    for(;;) {
        printf( "Enter d, x, y: " );
        if( scanf("%lf %lf %lf", d, x, y) == 3 &&
            (*d > 0.0 && *x > 0.0 && *y > 0.0) ) return;
        
        printf( "Error. Try again.\n\n" );
    }
}
Когда ввожу, например,

'a'

– срабатывает бесконечный цикл с сообщением об ошибке. Как это исправить?

Спасибо.

Решение задачи: «Проверка ввода зацикливается»

textual
Листинг программы
while ((c = getchar()) != EOF && c != '\n')
    ;

Объяснение кода листинга программы

  1. Ввод данных осуществляется с помощью функции getchar(), которая возвращает очередной символ ввода.
  2. Полученный символ сохраняется в переменной c.
  3. Проверка на условие: c не должен быть равен EOF (константа, обозначающая конец файла) и c не должен быть равен символу новой строки '\n'.
  4. Если условие выполняется, то происходит переход к следующей итерации цикла.
  5. В противном случае, цикл завершается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.867 из 5