Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/83: Рейтинг темы: голосов - 83, средняя оценка - 4.96
5 / 4 / 2
Регистрация: 27.01.2009
Сообщений: 30

Запись структуры в файл.

07.02.2009, 08:25. Показов 15847. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Структура следующая:
C++ Скопировано
1
2
3
4
5
struct TRAIN{
        char punkt[20];
        int nomb;
        float time;
    };
Массив из структур нужно записать в файл. Проблема следующая: файл открывается/создается но в него ничего не записывается.

Эту часть постановки задачи я реализовал следующим образом:
C++ Скопировано
1
2
3
4
5
6
7
8
9
10
    char name[20];
    cout<<"vv-te ima faila dla sozdania  -> ";
    cin>>name;
    ifstream fin(name, ios::app|ios::beg);
    for(i=0;i<4;i++)
    {
        fin.get(tr[i].punkt,10);
        fin>>tr[i].nomb;
        fin>>tr[i].time;
    }
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.02.2009, 08:25
Ответы с готовыми решениями:

Запись структуры в файл
Помогите найти ошибку в коде. Задание. Разработать программу на языке С + +, реализующей запись в файл информации о студенте (10...

Запись структуры в файл
Доброго времени суток! Программа: создается файл с данными художников ФИО автора , Наименование картин , год написание картин все...

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

9
Эксперт С++
 Аватар для XuTPbIu_MuHTAu
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
07.02.2009, 11:55
Цитата Сообщение от necto Посмотреть сообщение
Проблема следующая: файл открывается/создается но в него ничего не записывается. [/cpp]
Вы из него читаете.
1
5 / 4 / 2
Регистрация: 27.01.2009
Сообщений: 30
07.02.2009, 16:56  [ТС]
Лучший ответ Сообщение было отмечено как решение

Решение

Добавлено через 20 минут 27 секунд
Я нашел ошибку: вместо ifstream() нужен ofstream(). Плюс небольшие поправки в синтаксисе.

C++ Скопировано
1
2
3
4
5
6
7
8
    ofstream f(name, ios::app|ios::beg);
//..............
    for(i=0;i<4;i++)
    {
        f<<tr[i].punkt;
        f<<tr[i].nomb;
        f<<tr[i].time;
    }
Добавлено через 42 минуты 19 секунд
Полученая программа записывает структуру TRAIN(название пункта назначения, номер поезда, время) в массив из элементов типа TRAIN; упорядочивает записи по номерам поездов. Записывает значения в файл. Выводит на экран информацию о поезде по номеру. Программа с использованием подпрограмм.
Возможно кому-то поможет в решении своих задачь текст этой программы.
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#include <conio.h>
#include <iostream.h>
#include <iomanip.h>
#include <fstream.h>
#include <string.h>
#include <ctype.h>
struct TRAIN{
        char punkt[20];
        int nomb;
        float time;
    };
int vvod(struct TRAIN pp[10]);
int vivod(struct TRAIN pp[10]);
int per(struct TRAIN pp[10]);
int nom(struct TRAIN pp[10]);
int main()
{   clrscr();
    int i,j,k;
    char name[20];
    cout<<"vv-te ima faila dla sozdania  -> ";
    cin>>name;
    fstream f(name, ios::app|ios::in|ios::beg);
    TRAIN tr[10];
    vvod(tr);
    per(tr);
    for(i=0;i<4;i++)
    {
        f<<tr[i].punkt;
        f<<'\n';
        f<<tr[i].nomb;
        f<<tr[i].time;
        f<<'\n';
    }
    cout<<"zapisanie struct-i "<<endl;
    nom(tr);
    for(i=0;i<4;i++)
    {
        while (!f.eof())
        {
            f.getline(tr[i].punkt,10);
        }
        cout<<tr[i].punkt<<"   "<<endl;
        f>>tr[i].nomb;
        cout<<tr[i].nomb<<"   "<<endl;
        f>>tr[i].time;
        cout<<tr[i].time<<"   "<<endl;
    }
 
    vivod(tr);
    getch();
    return (0);
}
 
    int vvod(struct TRAIN pp[10]){
        int i=0;
        for(i=0;i<4;i++)
    {
        cout<<"vv-te nazvanie puncta naznachenia  -> ";
        cin>>pp[i].punkt;
        cout<<"vv-te nomer poezda  ->  ";
        cin>>pp[i].nomb;
        cout<<"vvedite vrema otpravlenia    ->  ";
        cin>>pp[i].time;
    }
    getch();
    return(0);
    }
    int per(struct TRAIN pp[10]){
    int i=0,j=0;
    for(j=0;j<4;j++)
    {
        for(i=0;i<3;i++)
        if (pp[i].nomb>pp[i+1].nomb)
        {
               pp[8].nomb=pp[i].nomb;
               pp[7].nomb=pp[i+1].nomb;
               pp[i].nomb=pp[7].nomb;
               pp[i+1].nomb=pp[8].nomb;
               pp[8].time=pp[i].time;
               pp[7].time=pp[i+1].time;
               pp[i].time=pp[7].time;
               pp[i+1].time=pp[8].time;
               strcpy(pp[8].punkt,pp[i].punkt);
               strcpy(pp[7].punkt,pp[i+1].punkt);
               strset(pp[i].punkt,' ');
               strset(pp[i+1].punkt,' ');
               strcpy(pp[i].punkt,pp[7].punkt);
               strcpy(pp[i+1].punkt,pp[8].punkt);
        }
    }
    getch();
    return(0);
    }
 
    int vivod(struct TRAIN pp[10]){
    int i=0;
    for(i=0;i<4;i++)
        cout<<pp[i].punkt<<"    "<<pp[i].nomb<<"   "<<pp[i].time<<endl;
    getch();
    return(0);
    }
 
    int nom(struct TRAIN pp[10]){
    int k=0,i=0;
    cout<<"vv-te nomer poesda inf-u o kotorom vivesty   ->  ";
    cin>>pp[10].nomb;
    for(i=0;i<4;i++)
        if (pp[i].nomb==pp[10].nomb)
        {
            k=5;
            cout<<pp[i].punkt<<"    "<<pp[i].nomb<<"   "<<pp[i].time<<endl;
        }
    if (k==0)
    cout<<"takix poezdov net "<<endl;
    getch();
    return(0);
    }
4
5 / 4 / 2
Регистрация: 27.01.2009
Сообщений: 30
09.02.2009, 23:05  [ТС]
Есть еще одна вещь, так как программа дорабатывается и усложняется(не знаю что еще придется доделать), есть вопрос про внос в подпрограммы работу с файлами.
Я не могу найти причину, но занесение в файлы из подпрограмм сделано не до конца корректно. Некоторые операции (например приведенная ниже) информацию из файла судя по всему не считывают, и не записывают.
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
39
40
41
42
43
    int per(struct TRAIN pp[10],char ima[20]){
    int i=0,j=0;
    fstream f(ima, ios::app|ios::in|ios::beg);
    clrscr();
    for(i=0;i<4;i++)
    {
        while (!f.eof()){
        f.getline(pp[i].punkt,10);
        }
        f>>pp[i].nomb;
        f>>pp[i].time;
    }
 
    for(j=0;j<4;j++)
    {
        for(i=0;i<3;i++)
        if (pp[i].nomb>pp[i+1].nomb)
        {
               pp[8].nomb=pp[i].nomb;
               pp[7].nomb=pp[i+1].nomb;
               pp[i].nomb=pp[7].nomb;
               pp[i+1].nomb=pp[8].nomb;
               pp[8].time=pp[i].time;
               pp[7].time=pp[i+1].time;
               pp[i].time=pp[7].time;
               pp[i+1].time=pp[8].time;
               strcpy(pp[8].punkt,pp[i].punkt);
               strcpy(pp[7].punkt,pp[i+1].punkt);
               strset(pp[i].punkt,' ');
               strset(pp[i+1].punkt,' ');
               strcpy(pp[i].punkt,pp[7].punkt);
               strcpy(pp[i+1].punkt,pp[8].punkt);
                f<<pp[i].punkt;
                f<<'\n';
                f<<pp[i].nomb;
                f<<pp[i].time;
                f<<'\n';
        }
    }
    f.close();
    getch();
    return(0);
    }
Мне нужна подсказка в чем может быть ошибка, или совет как можно тестировать вывод из файла...
0
Эксперт С++
 Аватар для XuTPbIu_MuHTAu
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
09.02.2009, 23:21
в коде разбираться совершенно не хочется,заметил только,что в 14-й строке ты объявляешь цикл по j от 0 до 4, при этом эту j нигде не используешь,т.е 4 раза делаешь одно и то же...

общая рекомендация - используй отладчик.
0
5 / 4 / 2
Регистрация: 27.01.2009
Сообщений: 30
10.02.2009, 15:17  [ТС]
Эту проблему я решил. Ошибка была в том, что структуры пишутся и читаются так:
Режим открытия бинарный(ios::binary).
C++ Скопировано
1
fstream f(ima, ios::app|ios::beg|ios::trunc|ios::binary);
Дли записи:
C++ Скопировано
1
f.write((char *)&pp[i],sizeof(TRAIN));
Для чтения:
C++ Скопировано
1
f.read((char *)&pp[i],sizeof(TRAIN));
0
5 / 4 / 2
Регистрация: 27.01.2009
Сообщений: 30
12.02.2009, 16:30  [ТС]
Итог(программа закончена). Добавилось графическое (слишком сильно сказано конечно)меню, 2 функции(дозапись структуры, замена любого поля выбранной структуры), особое спасибо XuTPbIu_MuHTAu, за отклик(кто знает что бы было и насколько бы дольше я писал эту программу)
В приведенном тексте только меню и 2 новые функции.
Меню
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include <conio.h>
#include <iostream.h>
#include <iomanip.h>
#include <fstream.h>
#include <string.h>
#include <ctype.h>
#include <io.h>
struct TRAIN{
        char punkt[20];
        int nomb;
        float time;
        };
int vvod(struct TRAIN pp[10],char ima[20]);
int vivod(struct TRAIN pp[10],char ima[20]);
int per(struct TRAIN pp[10],char ima[20]);
int nom(struct TRAIN pp[10],char ima[20]);
int doz(struct TRAIN pp[10],char ima[20]);
int zam(struct TRAIN pp[10],char ima[20]);
int main()
{   clrscr();
    int h,z,k,SS=0,vib;
    char name[20];
    TRAIN tr[10];
    cout<<"vv-te ima faila s -> ";
    cin>>name;
    h=1;
    vib=getch();
    z=1;
    while (2!=3){
        vib=21; h=1; z=1;
        while (vib!=13){
            clrscr();
            textbackground(0);
            clrscr();
            window(5,5,40,12);
            textbackground(6);
            textcolor(15);
            clrscr();
                  gotoxy(1,1);
                  cout<<"1-vvod       "<<endl;
                  gotoxy(1,2);
                  cout<<"2-vivod      "<<endl;
                  gotoxy(1,3);
                  cout<<"3-perest     "<<endl;
                  gotoxy(1,4);
                  cout<<"4-izbir vivd "<<endl;
                  gotoxy(1,5);
                  cout<<"5-dozapis    "<<endl;
                  gotoxy(1,6);
                  cout<<"6-zamena     "<<endl;
                  gotoxy(1,7);
                  cout<<"7-exit       "<<endl;
                      switch(z){
                        case 1:{ gotoxy(1,1); textcolor(4);  cprintf("  1-vvod       "); cout<<endl; break;}
                        case 2:{ gotoxy(1,2); textcolor(4);  cprintf("  2-vivod      "); cout<<endl; break;}
                        case 3:{ gotoxy(1,3); textcolor(4);  cprintf("  3-perest     "); cout<<endl; break;}
                        case 4:{ gotoxy(1,4); textcolor(4);  cprintf("  4-izbir vivd "); cout<<endl; break;}
                        case 5:{ gotoxy(1,5); textcolor(4);  cprintf("  5-dozapis    "); cout<<endl; break;}
                        case 6:{ gotoxy(1,6); textcolor(4);  cprintf("  6-zamena     "); cout<<endl; break;}
                        case 7:{ gotoxy(1,7); textcolor(4);  cprintf("  7-exit       "); cout<<endl; break;}
                       }
            vib=getch();
            if ((h<7)&(vib==80)){
                h=h+1; z=h;
            }
            else if ((h==7)&(vib==72)){
                h=1;   z=h;
            }
            else if ((h>1)&(vib==72)){
                h=h-1; z=h;
            }
            else if ((h==1)&(vib==80)){
                h=7;    z=h;
            }
        }
        switch(h){
            case 1:{ vvod(tr,name); break;}
            case 2:{ vivod(tr,name); break;}
            case 3:{ per(tr,name); break;}
            case 4:{ nom(tr,name); break;}
            case 5:{ doz(tr,name); break;}
            case 6:{ zam(tr,name); break;}
            case 7:{ return(0); }
         }
    }
    getch();
    return(0);
}
Добавление записи:
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
int doz(struct TRAIN pp[10],char ima[20]){
        fstream f(ima, ios::end|ios::app|ios::binary);
        int i=0,p=0,n=0;
        window(1,1,80,25);
        clrscr();
        textcolor(15);
        textbackground(0);
        clrscr();
        cout<<"dobav zapis? esli da nazmite 1 -> "<<endl;
        cin>>p;
        if(p==1)
        {
            long gg;
            f.seekp(0,ios::end);
            gg=f.tellp();
            n=gg/sizeof(TRAIN);
            for(i=n;i<(n+1);i++)
            {
                cout<<"vv-te nazvanie puncta naznachenia  -> ";
                cin>>pp[i].punkt;
                cout<<"vv-te nomer poezda  ->  ";
                cin>>pp[i].nomb;
                cout<<"vvedite vrema otpravlenia    ->  ";
                cin>>pp[i].time;
                f.write((char *)&pp[i],sizeof(TRAIN));
            }
    cout<<"zapis dobavlena "<<endl;
    }
    f.close();
    getch();
    return(0);
    }
И замена одного из полей записи.
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
39
40
41
42
43
44
45
46
47
int zam(struct TRAIN pp[10],char ima[20]){
    int k=0,i=0,n,l=0;
    fstream f(ima, ios::app|ios::in|ios::beg|ios::binary);
    clrscr();
    window(1,1,80,25);
    clrscr();
    textcolor(15);
    textbackground(0);
    clrscr();
    long int gg;
    f.seekg(0,ios::end);
    gg=f.tellg();
    n=gg/sizeof(TRAIN);
    cout<<"vv-te nomer poesda inf-u o kotorom zamenit   ->  ";
    cin>>pp[10].nomb;
    for(i=0;i<n;i++)
    {
        f.read((char *)&pp[i],sizeof(TRAIN));
    }
 
    for(i=0;i<n;i++)
        if (pp[i].nomb==pp[10].nomb)
        {
            k=5;
            cout<<pp[i].punkt<<"    "<<pp[i].nomb<<"   "<<pp[i].time<<endl;
            cout<<"vv-te chto zamn: 1 -punkt naz; 2 -nomer poezda; 3 -vrema otp. -> ";
            cin>>l;
            if (l==1){
                cout<<"vv-te nazvanie puncta naznachenia  -> ";
                cin>>pp[i].punkt;
            }
            else if (l==2){
                cout<<"vv-te nomer poezda  ->  ";
                cin>>pp[i].nomb;
            }
            else if (l==3){
                cout<<"vvedite vrema otpravlenia    ->  ";
                cin>>pp[i].time;
            }
                f.write((char *)&pp[i],sizeof(TRAIN));
        }
    if (k==0){
    cout<<"takix poezdov net "<<endl;}
    f.close();
    getch();
    return(0);
    }
0
 Аватар для M1H@L
2 / 2 / 0
Регистрация: 30.11.2010
Сообщений: 62
30.11.2010, 00:38
пожалста помоги necto напиши как прильно сделать пойск у структурі єслі елемент string а на елий тип я уже сделал (пример любой програми)

Добавлено через 46 секунд
necto, пожалста помоги necto напиши как прильно сделать пойск у структурі єслі елемент string а на елий тип я уже сделал (пример любой програми)
0
0 / 0 / 0
Регистрация: 04.12.2010
Сообщений: 8
18.03.2011, 22:25
ребята помогите пожалуйста сделать задание по экономической информатике...тут вроде блок схему нужно построить)
. Структура записей файла PEREVOZKA

п.п Наименование поля записи Идентификатор поля Тип Длина
1.Номер путевого листа NomPutList N 7
2.Пункт доставки PunktDost C 25
3.Дата выезда DataViezd C 10
4.Фамилия водителя FIO_Vodit C 25
5.Расход бензина на 1 км RashBenzin N 5.2
6.Расстояние до пункта доставки (в км) RasstPunkt N 6.2

Записи файла упорядочены по реквизитам 2 (2 и 3)
0
 Аватар для M1H@L
2 / 2 / 0
Регистрация: 30.11.2010
Сообщений: 62
31.03.2011, 23:51
я уже разабралса.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.03.2011, 23:51
Помогаю со студенческими работами здесь

Запись структуры в файл...
Помогите пожалуйста записать структуры в файл... #include &lt;iostream.h&gt; #include &lt;stdio.h&gt; #include &lt;memory.h&gt; #include...

Запись в файл структуры
Есть структура Помогите реализовать запись в файл? Мой вариант не работает.... #include&quot;stdafx.h&quot; ...

Запись структуры в файл.
3. Написать процедуры (или функции) записи в файл и считывания из файла массива структур. 4. Использовать файлы трех типов – текстовый...

запись структуры в файл
ПОМОГИТЕ пожалуйста......... не могу сделать так чтобы в файл по завершению работы программы записывалось действие которое...

Запись Структуры в файл
Здравствуйте пытаюсь записать массив структур в файл и не получается.В Файле содержится иероглифы.Помогите пожалуйста. #include...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Система статов в Unity
GameUnited 20.04.2025
Статы — фундаментальный элемент игрового дизайна, который определяет характеристики персонажей, предметов и других объектов в игровом мире. Будь то показатель силы в RPG, скорость передвижения в. . .
Статические свойства и методы в TypeScript
run.dev 20.04.2025
TypeScript прочно занял своё место в системе современной веб-разработки. Этот строго типизированный язык программирования не просто расширяет возможности JavaScript — он делает разработку более. . .
Batch Transform и Batch Gizmo Drawing API в Unity
GameUnited 20.04.2025
В мире разработки игр и приложений на Unity производительность всегда была критическим фактором успеха. Создатели игр постоянно балансируют между визуальной привлекательностью и плавностью работы. . .
Звук в Unity: Рандомизация с Audio Random Container
GameUnited 20.04.2025
В современных играх звуковое оформление часто становится элементом, который либо полностью погружает игрока в виртуальный мир, либо разрушает атмосферу за считанные минуты. Представьте: вы исследуете. . .
Максимальная производительность C#: Советы, тестирование и заключение
stackOverflow 20.04.2025
Погружение в мир микрооптимизаций C# открывает перед разработчиком целый арсенал мощных техник. Но как определить, где и когда их применять? Ответ начинается с точных измерений и профилирования. . . .
Максимальная производительность C#: Предсказание ветвлений
stackOverflow 20.04.2025
Третий ключевой аспект низкоуровневой оптимизации — предсказание ветвлений. Эта тема менее известна среди разработчиков, но её влияние на производительность может быть колоссальным. Чтобы понять. . .
Максимальная производительность C#: Векторизация (SIMD)
stackOverflow 20.04.2025
Помимо работы с кэшем, другим ключевым аспектом низкоуровневой оптимизации является векторизация вычислений. SIMD (Single Instruction, Multiple Data) позволяет обрабатывать несколько элементов данных. . .
Максимальная производительность C#: Процессорный кэш
stackOverflow 20.04.2025
Знакомство с внутренним устройством процессорного кэша — ключевой шаг в написании по-настоящему быстрого кода на C#. Этот слой архитектуры компьютера часто ускользает от внимания разработчиков, но. . .
Максимальная производительность C#: Введение в микрооптимизации
stackOverflow 20.04.2025
В мире разработки на C# многие привыкли полагаться на . NET Runtime, который "магическим образом" сам оптимизирует код. И часто это работает - современные JIT-компиляторы творят чудеса. Но когда речь. . .
MVC фреймворк в PHP
Jason-Webb 19.04.2025
Архитектурный паттерн Model-View-Controller (MVC) – это не просто модный термин из мира веб-разработки. Для PHP-программистов это фундаментальный подход к организации кода, который радикально меняет. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер