0 / 0 / 0
Регистрация: 03.12.2015
Сообщений: 53
1

Выводится одна лишняя строка (работа с бинарным файлом)

28.04.2017, 01:39. Показов 1402. Ответов 8
Метки нет (Все метки)

Буду благодарен за помощь.


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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include<iostream>
#include <fstream>
#include <algorithm>
#include <string>
#include <cstring>
#include <iomanip>
using namespace std;
struct students
{
    char fam[100];
    char name[50];
    char ot[100];
    char pol[50];
    char fa[20];
    char curs[10];
    char grup[10];
    char gor[50];
    int bal;
    int bal1;
    int bal2;
    
};
int main()
{
    setlocale(LC_ALL, "RUS");
    char fname_bin[100];
    students stud;
        cout << "Введите имя бинарного файла " << endl;
    cin >> fname_bin;
    ofstream fout(fname_bin, ios::binary);
    ifstream fin("1.txt");
    while (fin)
    {
        fin >> stud.fam >> stud.name >> stud.ot >> stud.pol >> stud.fa >> stud.curs >> stud.grup >> stud.gor >> stud.bal >> stud.bal1 >> stud.bal2;
        cout << stud.fam << "\t" << stud.name << "\t" << stud.ot << "\t" << stud.pol << "\t" << stud.fa << "\t" << stud.curs << "\t" << stud.grup << "\t" << stud.gor << "\t" << stud.bal << " " << stud.bal1 << " " << stud.bal2  << endl;
        fout.write(reinterpret_cast < char *>(&stud), sizeof(stud));
        
    }

Список
Петрова Ольга Владимировна ж ИТФ 1 ИБО Москва 2 3 5
Блок Ирина Генадьевна ж ФЭФ 2 ИНО Щёлково 5 2 2
Смирнов Игорь Васильевич м ФУСГО 4 ПО Мытищи 5 4 5
Бусина Томара Ивановна ж ИТУ 1 ТО Пушкино 3 3 2
Блок Олег Александрович м ИБО 3 УО Королёв 5 5 5


Выводится одна лишняя строка (работа с бинарным файлом)
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.04.2017, 01:39
Ответы с готовыми решениями:

Выводится лишняя строка из файла
Здравствуйте. При выводе из файла выводится лишняя строка. Т.е. если 13 строк в файле, то...

Работа с бинарным файлом
Можно ли из бинарного файла выписывать строки?

Работа с бинарным файлом
Всем привет! есть тестовый пример в котором я пытаюсь записать в бинарный файл три переменных, а...

Работа с бинарным файлом
Доброго времени суток всем. Помогите пожалуйста доделать задачу: Создать класс для работы с...

8
nd2
3433 / 2812 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
28.04.2017, 01:45 2
Чтение в параметры while() помести.
0
0 / 0 / 0
Регистрация: 03.12.2015
Сообщений: 53
28.04.2017, 01:51  [ТС] 3
Подскажите Как это сделать ?
0
nd2
3433 / 2812 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
28.04.2017, 01:54 4
Цитата Сообщение от Дмиттрий Посмотреть сообщение
Подскажите Как это сделать ?
Вырезать из кода 34 строку (исключая ;, которую нужно удалить) и вставить в параметры while() (вместо fin).
0
0 / 0 / 0
Регистрация: 03.12.2015
Сообщений: 53
28.04.2017, 02:35  [ТС] 5
Задание было такое : скопировать структуру с текстового файла в бинарный. А дальше работать только с бинарным
Как адаптировать под этот код, чтобы выполнялось это условие
Необходимо ли открывать снова бинарный файл ?


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
cout << "Отформатированный список\n" << endl;
    sort(stud, stud + n, [](auto l, auto r)
    {
        int famcmp = strncmp(l.fam, r.fam, 100);
        if (famcmp < 0)
            return true;
        else if (famcmp > 0)
            return false;
        else
            return strncmp(l.name, r.name, 100) < 0;
    });
 
    for (int i = 0; i < n; ++i)
        if (stud[i].pol && (stud[i].bal == 2 || stud[i].pol && stud[i].bal1 == 2 || stud[i].pol && stud[i].bal2 == 2))
        {
            stud[i].metka = "Студент имеет задолжность";
            cout << stud[i].fam << "\t" << stud[i].name << "\t" << stud[i].ot << "\t" << stud[i].pol << "\t" << stud[i].fa << "\t" << stud[i].curs << "\t" << stud[i].grup << "\t" << stud[i].gor << "\t" << stud[i].bal << " " << stud[i].bal1 << " " << stud[i].bal2 << " " << stud[i].metka << endl;
        }
        else
        {
            cout << stud[i].fam << "\t" << stud[i].name << "\t" << stud[i].ot << "\t" << stud[i].pol << "\t" << stud[i].fa << "\t" << stud[i].curs << "\t" << stud[i].grup << "\t" << stud[i].gor << "\t" << stud[i].bal << " " << stud[i].bal1 << " " << stud[i].bal2 << " " << endl;
        }
}
0
nd2
3433 / 2812 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
28.04.2017, 02:38 6
Лучший ответ Сообщение было отмечено Дмиттрий как решение

Решение

Цитата Сообщение от Дмиттрий Посмотреть сообщение
Как адаптировать под этот код, чтобы выполнялось это условие
Необходимо ли открывать снова бинарный файл ?
Проблема с лишним выводом решилась?
1
0 / 0 / 0
Регистрация: 03.12.2015
Сообщений: 53
28.04.2017, 02:40  [ТС] 7
ДА, спасибо большое
0
nd2
3433 / 2812 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
28.04.2017, 03:10 8
Цитата Сообщение от Дмиттрий Посмотреть сообщение
Необходимо ли открывать снова бинарный файл ?
Был открыт для записи, чтобы читать нужно закрыть и открыть для чтения в бинарном режиме.

Добавлено через 4 минуты
Цитата Сообщение от Дмиттрий Посмотреть сообщение
Как адаптировать под этот код
Создавай массив (stud), своих структур, размером n (сколько записано структур в файле). Читай в цикле (read) в этот массив из файла n структур.
0
1550 / 875 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
28.04.2017, 03:41 9
Цитата Сообщение от nd2 Посмотреть сообщение
Читай в цикле (read) в этот массив из файла n структур
Цикл не обязателен. Стандартом гарантируется непрерывность массива в памяти, т.е. для Type arr[N]; гарантируется sizeof(arr)==sizeof(Type) * N;. Т.е. можно просто read(arr, sizeof(arr[0]) * n);
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.04.2017, 03:41
Помогаю со студенческими работами здесь

Работа с бинарным файлом
почему программа не выводит 16-ричный дамп бинарного файла? int main () { streamoff lSize; ...

Работа со структурой и бинарным файлом
Что может быть за ошибка в case 2? struct sport_complex{//Структура struct trainers{ char...

Работа с бинарным файлом(Подсчет записей)
void open_bin(l_lib *l, int lines_count) // функция для открытия bin файла { fstream...

Почему выводится только одна строка матрицы
#include &lt;stdafx.h&gt; #include &lt;iostream&gt; #include &lt;clocale&gt; #include &lt;ctime&gt; #include &lt;conio.h&gt;...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru