Проверка ввода зацикливается - 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') ;
Объяснение кода листинга программы
- Ввод данных осуществляется с помощью функции getchar(), которая возвращает очередной символ ввода.
- Полученный символ сохраняется в переменной
c. - Проверка на условие:
cне должен быть равен EOF (константа, обозначающая конец файла) иcне должен быть равен символу новой строки '\n'. - Если условие выполняется, то происходит переход к следующей итерации цикла.
- В противном случае, цикл завершается.