Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 18.02.2017
Сообщений: 51

Чтение txt файла, содержащего массив структур

16.10.2019, 14:54. Показов 2474. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер!
Прошу помощи у опытных людей.
При решении задачи столкнулся с проблемой чтения массива структур из файла.
Не могу понять как можно реализовать чтение txt файла данных и заполнение данными из этого файла в массив.

Сам txt файл выглядит так:
Code
1
2
3
4
0 осмотр 150 1_день
1 починка 300 2_дня
2 чистка 400 3_дня
3 обновление 100 4_дня
Сама структура выглядит так:
C++
1
2
3
4
5
6
    struct serviceStruct {
        int id;
        char name[20];
        double cost;
        char time[20];
    };
Вот код, с помощью которого читается файл:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    int length = 0;
    ifstream readFile;
    readFile.open("arrayService.txt");
    if (!readFile.is_open()) {
        cout << "ошибка чтения файла!" << endl;
        cin.get();
        exit(1);
    } else {
        // кол-во строк в файле
        char str1 [30];
        while (!readFile.eof())
        {
            readFile.getline(str1,30);
            length++;
        }
        // выделение памяти для массива
            serviceStruct arrayService[length];
        // В массив добавить данные из файла
        for (int i = 0; length; ++i) {
            readFile >> arrayService[i].id >> arrayService[i].name >> arrayService[i].cost;
            cout << arrayService[i].id << ' ' << arrayService[i].name << ' ' << arrayService[i].cost << endl;
            //readFile >> arrayService[i].id >> arrayService[i].name >> arrayService[i].cost >> arrayService[i].time[i];
        }
    }
Причем файл в каком-то смысле даже читается, но все данные "кривые" - будто-бы есть какая-то ошибка связанная с типами данных или с кодировкой.
На скриншоте прикрепил как выглядит результат.
Миниатюры
Чтение txt файла, содержащего массив структур  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.10.2019, 14:54
Ответы с готовыми решениями:

Как считать массив структур из файла txt
#include &quot;stdafx.h&quot; #include &lt;fstream&gt; #include &lt;iostream&gt; #include &lt;cstring&gt; using namespace std; struct slug { char...

Чтение из файла в массив структур
Помогите пожалуйста как правильно написать код. Есть некий текстовый файл на самом деле это Ексел таблица которая сохранена как csv...

Создать массив структур, заполнив его информацией из файла “input.txt”. Упорядочить этот массив по убыванию суммы баллов
В файле “input.txt” задано количество студентов механикоматематического факультета ННГУ и их список. В каждой строке списка содержатся...

5
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
16.10.2019, 15:01
Лучший ответ Сообщение было отмечено Zaniel1 как решение

Решение

Цитата Сообщение от Zaniel1 Посмотреть сообщение
C++
1
while (!readFile.eof())
У вас в конце этого цикла файл уже все, прочитался.

Добавьте в конце этого цикла:
C++
1
2
readFile.clear();
readFile.seekg(0, std::ios::beg);
Если, конечно, вы целиком показали код, то это должно помочь.

Добавлено через 58 секунд
Цитата Сообщение от Zaniel1 Посмотреть сообщение
C++
1
for (int i = 0; length; ++i) {
Вот это тоже неверно.
Надо так:
C++
1
for (int i = 0; i < length; ++i) {
Добавлено через 1 минуту
Еще обратите внимание, что в структуре у вас четыре поля, а читаете вы только три.
1
0 / 0 / 0
Регистрация: 18.02.2017
Сообщений: 51
16.10.2019, 15:07  [ТС]
Исправил моменты проблемные по вашим советам.
Да, работает уже лучше.

Насчет четвертого поля знаю, просто я вопрос когда задавал код немного изменил, чтобы понять саму суть проблемы было проще, а 4 поле забыл из потока убрать.

Сейчас у меня вот какая проблема осталась, на выводе первая запись по каким-то причинам с кривой кодировкой подается, а все остальные с нормальной.

Code
1
2
3
4
0 |эn 1.79807e-307 Мьn
0 осмотр 150 1_день
0 осмотр 150 1_день
0 осмотр 150 1_день
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
16.10.2019, 15:12
Цитата Сообщение от Zaniel1 Посмотреть сообщение
по каким-то причинам с кривой кодировкой подается, а все остальные с нормальной.
Наверное сохраняли в UTF-8 c BOM.
Найдите редактор, который позволит сохранить без него.

Добавлено через 3 минуты
Небольшое уточнение.
Цитата Сообщение от DrOffset Посмотреть сообщение
Добавьте в конце этого цикла:
"В конце" цикла следует читать как "после" цикла.
0
0 / 0 / 0
Регистрация: 18.02.2017
Сообщений: 51
16.10.2019, 15:27  [ТС]
Перезаписал файл и добавил после цикла те 2 строки кода, и все заработало.
Спасибо вам!

Можно вам еще вопрос такой. Последнее слово в файле пишется с пробелом, можно ли как-то, не сильно усложняя программу, сделать чтобы можно было писать эти последние слова без пробела, но чтобы пробел не считался как разделитель для этого поля?
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
16.10.2019, 15:30
Цитата Сообщение от Zaniel1 Посмотреть сообщение
но чтобы пробел не считался как разделитель для этого поля?
std::getline
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.10.2019, 15:30
Помогаю со студенческими работами здесь

Чтение из текстового файла массив структур
Доброго времени суток. Нужно из текстового файла заполненного по типу ( Фио Диагноз числопоступления пол ) занести информацию в бинарный...

Форматированное чтение из файла в массив структур
Здравствуйте, посоветуйте как лучше сделать чтение из файла в массив структур с разными типами данных. Входной файл (все денные введены...

Чтение данных из файла в динамический массив структур
Здравствуйте, подскажите пожалуйста, как можно осуществить чтение данных из файла в динамический массив структур? Или может можно как то...

Чтение из файла в массив структур (ошибка со string)
Есть задача: считать из файла информацию в массив структур. Файл: Иван Иванов Иванович 18 1 2 8.6 Петр Петров Петрович 17 1 3...

Чтение двоичного файла и занесение данных в массив структур
/*чтение двоичного файла и занесение данных в массив S (кото- рый объявлен как указатель на тип Stud)*/ bool read_file(FILE * f,...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru