Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.06.2009, 22:13   #1
nazavrik
Форумчанин
 
Аватар для nazavrik
 
Регистрация: 01.09.2008
Сообщений: 178
По умолчанию Почему не определяется конец файла?

Есть процедура записи отрезка в файл:

Код:
void write_to_file(double a, double b)
{
        FILE *file;     
        fopen_s(&file, file_name, "a+");
        fprintf_s(file,"[%f;%f]\n", a,b);
        fclose(file);
}
Отрезков может быть несколько, каждый для удобства записывается в новой строке.

При считывании:

Код:
if(fopen_s(&file, file_name, "r")==0)
{
    fseek( file, 0L, SEEK_SET );
 
        while(!feof(file))
        {
        fscanf_s(file, "%c", &ch1,1);
        fscanf_s(file, "%lf", &xk);
        fscanf_s(file, "%c", &ch2,1);
        fscanf_s(file, "%lf", &x0);
        fscanf_s(file, "%c", &ch3,1);
        fscanf_s(file, "%c", &ch4,1);
 
        double x = xk - (xk - x0)*f(xk)/(f(xk) - f(x0)); 
 
        while(abs(x-xk)>e || abs(f(xk))>e)
        {
                x0 = xk;
                xk = x;
                x = xk - (xk - x0)*f(xk)/(f(xk) - f(x0)); 
        }
        printf("x = %.10lf",x); 
        }

Происходит следующее: правильно считывает первый отрезок, второй и т.д. считывает последний и затем вместо того, чтобы завершить процесс по достижению конца файла ещё раз считывает последний отрезок. Т.е. последний отрезок считывается дважды и только после этого завершает.

Почему так происходит?

Модератор: тег CODE
Быть радикальным - значит понять вещь в её корне. К.Маркс
nazavrik вне форума Ответить с цитированием
Старый 16.06.2009, 22:20   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Это из-за того, что там в файле в конце символ перевода строки остается.
Попробуйте при чтении последнего элемента (в строке) делать вот так:
Код:
 fscanf_s(file, "%c\n", &ch4,1);
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 16.06.2009, 22:31   #3
nazavrik
Форумчанин
 
Аватар для nazavrik
 
Регистрация: 01.09.2008
Сообщений: 178
По умолчанию

Большое спасибо)

Всё работает.
Быть радикальным - значит понять вещь в её корне. К.Маркс
nazavrik вне форума Ответить с цитированием
Старый 17.06.2009, 20:53   #4
paladinn
Пользователь
 
Регистрация: 19.12.2008
Сообщений: 26
По умолчанию

либо "пока не конец файла " while (!feof(file)) и если не конец файла if (!feof(file)) то делаешь чо надо )
paladinn вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
MinLines(f), которая вставляет строку минимальной длины в начало и конец файла ArtS Паскаль, Turbo Pascal, PascalABC.NET 0 24.05.2009 19:13
Дописать в конец файла Cdevelop Общие вопросы C/C++ 1 25.03.2009 21:39
Дописать в конец файла Cdevelop Общие вопросы C/C++ 5 15.03.2009 16:46
Сформировать массив X[N], n-й член которого определяется формулой X(N) = 1/N! GUnt Паскаль, Turbo Pascal, PascalABC.NET 1 28.12.2008 13:52
DVD-ROM то определяется, то не определяетс... Иллидан Компьютерное железо 1 22.04.2008 15:22