С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
9 / 9 / 8
Регистрация: 08.11.2014
Сообщений: 215
Записей в блоге: 1
1

Eof() работает на 1 итерацию больше, чем нужно

13.04.2018, 15:49. Показов 1281. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Работаю с чтением/записью в файл прямого доступа
Сперва записываю в пустой файл объект структуры, потом считываю данные и записываю их в вектор, и вывожу в консоль данные из вектора
Структура
C++
1
2
3
4
5
6
struct ClassData
{
    long time = //some data
    size_t _entity = // some data
    size_t _editor = // some data
};
Записываю в файл
C++
1
2
3
4
5
6
7
8
9
10
ClassData data;
ofstream toFile("Info.dat", ios_base::app);
if (!toFile)
{
    cerr << "[Main | toFile] " << "File not found" << endl;
} else
{
    toFile.write((char *) &data, sizeof(data));
}
toFile.close();
Считываю данные в вектор
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
vector<ClassData> readData;
ifstream fromFile("Info.dat", ios_base::in);
if (!fromFile)
{
    cerr << "[Main | fromFile] " << "File not found" << endl;
} else
{
    ClassData d;
    while (!fromFile.eof())
    {
        fromFile.read((char *) &d, sizeof(d));
        readData.push_back(d);
    }
}
fromFile.close();
Проблема заключается в том, что добавление данных в вектор выполняется на 1 раз больше, чем надо. Если в файле всего одна запись, то в векторе их будет 2
Как это исправить?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.04.2018, 15:49
Ответы с готовыми решениями:

Высота страницы больше, чем нужно
Добрый день, господа! Подскажите, кому не трудно. Наткнулся на бесплатный ресурс html5up.net и...

Запрос выдаёт больше записей, чем нужно
Выборка из трёх таблиц: 1. Клиенты. 2.Адреса клиентов (может быть больше одного) 3.Заказы. Таблица...

BackgroundWorker крутится больше раз чем нужно
Добрый вечер. Есть такой код: ////////////// ...

Разбивка диска. Минимальный размер больше, чем нужно
Доброго дня всем. При разбивке диска (средствами Win, Partition Magic) не получается выбрать нужный...

1
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
13.04.2018, 18:16 2
C++
1
2
3
4
5
6
    while (!fromFile.eof())
    {
        fromFile.read((char *) &d, sizeof(d)); // здесь считывается EOF (в d остаётся старое значение), что происходит дальше? 
                                                 //В вектор добавляется старое значение d
        readData.push_back(d);
    }
Проверка на чтение EOF должна быть сразу после чтения. А лучше так:
C++
1
2
3
4
    while (fromFile.read((char *) &d, sizeof(d)))
    {
          readData.push_back(d);
    }
1
13.04.2018, 18:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.04.2018, 18:16
Помогаю со студенческими работами здесь

Код запрашивает на одно значение больше, чем нужно
Есть вот такой код но при выполнение программы спрашивает на одно больше значение . Например я хочу...

Запрет на загрузку если файлов больше чем нужно
Как сделать так чтобы например если пользователь выбрал больше 3-х фотографий, то выводилось бы...

Текст из TextBox в ListBox: пишется больше информации, чем нужно
то есть вместо &quot;текст&quot; в ListBox появляется System.Windows...Text &quot;текст&quot; Как это убрать?

Почему цикл while выполняет здесь больше итераций чем нужно?
Не понимаю от чего здесь цикл выполняется 21 раз вместо 10. Притом если вместо i &lt; 10 написать i &lt;=...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru