Столкнулся с проблемой при проверке на ввод EOF. Либо возникает ошибка сегментирования, либо break не срабатывает для счетчика
Программа некорректно работает в структурах с проверкой на EOF. Если делаю через структуру do...while возникает "ошибка сегментирования (стек памяти сброшен на диск)", если иду через цикл for (в коде снизу он закомментирован), то для счетчика цикла не срабатывает оператор break (то есть ввод прекращается. При выводе элементов массива, до которых ввод не дошел - выводится значение инициализированное по умолчанию, но значение i выводится как 21). В чем ошибка?
То, что EOF прекращает ввод - условие задания.
Подкорректированный код
#include <stdio.h>
#define SIZE 20
double rootCalc(const double, const double, const double);
main ()
{
double mass[SIZE]={0};
double e, x0=1, x;
int i=0, max;
printf("Please enter 'e' value: ");
scanf("%lf", &e);
FILE *input;
input=fopen("input", "r");
printf("\nPlease enter value of xi (enter EOF character to end input):\n");
for (i=0; i<21;) {
if (fscanf(input, "%lf", &mass[i]))
i++;
else
break;
}
max=i;
printf("\nRoots calculation\n");
//printf("%10s %10s\n", "Value", "Root");
for (i=0; i<max; i++) {
x=mass[i];
x=rootCalc(x, e, x0);
printf("%-.10g %-.10g\n", mass[i], x);
}
return 0;
}
Ответы (1 шт):
do {
i++;
scanf("%lf", &mass[0][i]);
}
while (mass[0][i] != (EOF));
Однако...
Кто вам сказал, что при невозможности чтения в переменной окажется -1?
while(scanf("%lf", &mass[0][i]) == 1) ++i;
P.S. Кстати, на всякий случай — что вы имеете в виду, когда пишете
enter EOF character to end input
Что именно и как именно должен ввести пользователь?
P.P.S. Вы преднамеренно начинаете считывание с элемента mas[0][1]? Так и надо?
