Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
24 / 6 / 3
Регистрация: 06.12.2015
Сообщений: 319
1

Считать из файла в структуру

26.12.2016, 15:50. Показов 1011. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите написать метод, который будет считывать данные из файла в структуру и разделять именно на поля структуры. Пока что получилось только считать файл в строку и присвоить эту строку другой структуре. как сделать так, чтобы считывать из файла в разные поля?) Заранее спасибо, сам пробовал разобраться очень долго и пока увы не получается)

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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#include "stdafx.h"
#include <conio.h>
#include <windows.h>
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <locale> 
#include <cstring>
 
using namespace std;
 
    struct AUZ
    {
        char *name = new char[100];
        double GPU;
    };
    struct AUZ1
    {
        char *name1 = new char[100];
        double GPU1;
    };
 
 
    bool Changer(char ch)
    {
        if (ch == 'y' || ch == 'Y') return true;
        else return false;
    }
 
    void AddingStudent()
    {           
        ofstream f;
        f.open ("C:\\My_Project\\data_base.txt", ios::app | ios::out);      
        int n;
        cout << "Сколько студентов необходимо добавить в базу? ";
        (cin >> n).get();
        cout << "\n\n";     
        AUZ*  student = new AUZ[n];
        for (int i = 0; i < n; i++)
        {
            cout << "Введите ФИО студента - ";
            
            cin.getline(student[i].name, 50);           
            f << student[i].name << " - ";
            cout << "\n";
            
            cout << "Введите средний балл студента - ";
            (cin >> student[i].GPU).get();
            f << student[i].GPU << endl;
            cout << "\n";
        }
        cout << "Если хотите продолжить нажмите Enter.";
        cout << "\n\n";
        cin.get();
        f.close();          
    }   
 
    void ChangingStudent()
    {
        ifstream f("C:\\My_Project\\data_base.txt", ios::binary | ios::in);
        string s;
        int n = 150;
        char change;                
        cout << "Хотите изменить данные в базе (y / n)\n";
        cin >> change;
 
        AUZ1* student1 = new AUZ1[n];
        AUZ*  student = new AUZ[n];
        char str[80];
 
 
        for (int i = 0; i<n; i++)
        {
            if (f.eof()) break;
            f.getline(str, sizeof(str)).eof();
            student1[i].name1 = str;
            cout << student1[i].name1 << endl;
        
        }
 
        cout << "Введите фамилию студента\n";
        cin >> s;
        while (getline(f, s))
        {
            int i = 1;
            if (s.find(s) != string::npos)
            {
                cout << i << " - совпадений найдено\n";
            }
            i++;
        }
 
        
            
        cout << "\n\n";
        f.close();      
    }
 
    void DeleteStudent()
    {
 
    }   
 
    int main()
    {
        //установить вручную шрифт Lucida Console в свойствах окна консоли
 
        SetConsoleCP(1251);
        SetConsoleOutputCP(1251); 
 
        setlocale(LC_ALL, "");
        CreateDirectory(L"C:\\My_Project", NULL);       
 
        int k;
 
        AUZ student;        
 
        for (;;)
        {
            cout << "База данных студентов группы АУЗ-261\n";
            cout << "Выберите пункт меню\n";
            cout << "1. Добавление карточки студентав базу\n";
            cout << "2. Измение карточки студента\n";
            cout << "3. Удаление карточки студента\n";
            cout << "4. Выход из программы\n";
 
            (cin >> k).get();
            if (k < 4 && k>0)
            {
                switch (k)
                {
                case 1:
                    AddingStudent();
                    break;
                case 2:
                    ChangingStudent();
                    break;
                case 3:
                    DeleteStudent();
                    break;              
                }
            }
            else if (k <= 0 || k > 4) cout << "Ошибка ввода\n\n";
            else break;         
        }   
        cin.get();          
        return 0;
    }
Добавлено через 7 минут
Интересует именно ф-ия ChangingStudent(). Первая ф-ия по добавлению студентов работает испарвно
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.12.2016, 15:50
Ответы с готовыми решениями:

Считать с файла в структуру
Ребятки, похожие темы конечно есть но помощь нужна :) есть такая структура struct vect { ...

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

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

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

3
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
26.12.2016, 15:51 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
#include <iostream>
#include <limits>
#include <string>
 
struct AUZ
{
    char *name = new char[100];
    double GPU;
};
 
std::istream& operator>> (std::istream &ist, AUZ &a)
{
    ist.getline(a.name, 100);
    ist >> a.GPU;
    ist.get();
    return ist;
}
 
int main()
{
    AUZ a, b;
    std::cin >> a >> b;
    std::cout << a.name << " " << a.GPU << std::endl << b.name << " " << b.GPU;
}
0
24 / 6 / 3
Регистрация: 06.12.2015
Сообщений: 319
26.12.2016, 15:55  [ТС] 3
Извините, не могли бы вы пояснить как работает ваш код?
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
26.12.2016, 16:05 4
Цитата Сообщение от Mnemonik39 Посмотреть сообщение
как работает ваш код?
Добавил перегрузку оператора считывания с потока чтобы он научился работать с типом AUZ.
getline считывает строку, но не более 100 символов.
метод get удаляет символ '\n', который остаётся в потоке.
1
26.12.2016, 16:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.12.2016, 16:05
Помогаю со студенческими работами здесь

Считать структуру из бинарного файла
Не получается считать структуру из бинарного файла. Если при работающей программе можно сразу...

Считать данные в структуру из файла
Здравствуйте! Подскажите как считать с текстового файла в структуру Считать в строку а затем...

Считать даные из файла в структуру
Написал код в котором я записываю даные в файл структурой. А как их оттуда считать? Вот код...

Подскажите, как считать из файла структуру
Только начали работу с файлами на С. Поэтому пока что не совсем разобралась, что и куда. Struct...

Считать все слово из файла в структуру
Доброго времени суток, форумчане! Есть структура struct WORKER { char FIO; char post;...

Как считать структуру из файла и вывести ее?
Как считать структуру из файла и вывести ее?? Вот файл: Почему-то не работает #include...


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

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