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

Как записать это в файл?

26.02.2021, 19:54. Показов 1288. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Условия -При решении задачи использовать тип данных “структура”;
Написать программу, создающую файл данных, соответствующий условию задачи;
Решить задачу с использованием данных созданного файла.


О каждом из студентов известны фамилия и 4 оценки. Определить средний балл каждого
студента и вывести соответствующий документ.


Впринципе понятно, структуру я создал, мне нужно записать это файл, потом из файла взять и все считать, вроде как все это считывать я разобрался или разберусь уж точно. Может ли кто-то глянуть на код и сказать, верно ли у меня сделано на данный момент и подскажите пожалуйста как записать структуру в файл.


Я смотрел ролики на ютубе, там записывали обычные вещи типо цифры или текст.

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
#include <iostream>
#include <fstream>
using namespace std;
 
 
struct students{
    int score[4];
    string name;
 
};
 
 
int find_free(students*idk,int SIZE) {
    register int t;
    for (t = 0; idk[t].score[0] && t < SIZE; ++t);
    if (t == SIZE) return -1;
    return t;
}
 
 
void ball(students *idk, int n){
 
    int slot;
    char s[80];
    int SIZE = n;
    slot = find_free(idk,SIZE);
 
    if (slot == -1) {
        cout << ("\nСписоk заполнен")<<endl;
        return;
    }
 
    cout<<"Введите имя студента"<<endl;
    cin>>idk[slot].name;
 
 
    int count = 0;
    cout<<"Введите баллы студента"<<endl;
    for (int i = 0; i < 4; ++i) {
 
        cin>>idk[slot].score[i];
        count++;
 
 
    }
 
}
 
 
int main() {
 
    ofstream file("text1");
 
    int count = 0;
    int n;
    cout<<"Введите количество студентов"<<endl;
    cin>>n;
   students *idk = new students[n];
 
 
   while(count != n){
       ball(idk,n);
       count++;
   }
 
 
 
 
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.02.2021, 19:54
Ответы с готовыми решениями:

перед мной стоит задача записать данные с 8 LabeledEdit в текстовый файл, как это сделать?
перед мной стоит задача записать данные с 8 LabeledEdit в текстовый файл, как это сделать?

Как записать в текстовый файл что-то, а потом это прочитать в командной строке?
Как записать в текстовый файл что-то, а потом это прочитать в командной строке?

Файл: Необходимо считать символы из файла и записать в массив unsigned int array[2]. Не подскажите как это сделать?
Итак, есть файл. В нем записано восемь символов по одному байту, мне нужно считать их и записать в...

Открыть файл, пометить все файлы кроме самого длинного, записать это в ноый файл
Файл содержит произвольные текстовые строки. В выходном файле все строки дополнены символом «*» до...

15
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
26.02.2021, 20:27 2
relanix, для начала нормально. структуру можно объявить так:
C++
1
2
3
4
5
struct Student{
    string surname;
    int mark[4];
    double avg; 
};
char s[80]; - уберите и вообще не используйте строки С-стиля
функцию find_free и строки где slot - я бы тоже убрал

в main по возможности оставляйте только вызов функций (заполнение массива структур, запись файла, печать данных)
запись-чтение посмотрите например в теме:
Считывание структур из файла
1
0 / 0 / 0
Регистрация: 16.10.2020
Сообщений: 117
26.02.2021, 20:35  [ТС] 3
Я сделал так, но оно записывает только 1 число и 1 букву

Добавлено через 27 секунд
ofstream outfile;
outfile.open("txt1");
for (int i = 0; i < n; ++i) {
outfile<<idk->score[i];
outfile<<idk->name[i];
}

outfile.close();

Добавлено через 11 секунд
Понял, сейчас попробую как вы сказали
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
26.02.2021, 20:40 4
ввод данных:
C++
1
2
3
4
5
6
7
8
9
10
void SetData (Student *data, int n){
    for (int i = 0; i < n; i++)
    {
        cout << "Student " << i + 1 << ":\n"; 
        cout << "Surname: "; cin >> data[i].name;    
        cout << "Enter 4 marks: ";
        for (int j = 0; j < 4; j++)  
            cin >> data[i].mark[j];
    }
}
1
0 / 0 / 0
Регистрация: 16.10.2020
Сообщений: 117
26.02.2021, 20:41  [ТС] 5
спасибо
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
26.02.2021, 20:59 6
Лучший ответ Сообщение было отмечено relanix как решение

Решение

relanix, для спасибо есть кнопка +1Спасибо - просто Вы пустым сообщением блокируете мне возможность корректировки сообщения. в общем, для начала:
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
#include <iostream>
#include <fstream>
using namespace std;
 
struct Student{
    string surname;
    int mark[4];
    double avg; 
}; 
 
void SetData (Student *data, int n)
{
    for (int i = 0; i < n; i++)
    {
        cout << "Student " << i + 1 << ":\n"; 
        cout << "Surname: "; cin >> data[i].surname;    
        cout << "Enter 4 marks: ";
        for (int j = 0; j < 4; j++)  
            cin >> data[i].mark[j];
    }
} 
 
void PrintData (Student *data, int n)
{
    for (int i = 0; i < n; i++)
    {         
        cout << data[i].surname << " ";       
        for (int j = 0; j < 4; j++)        
            cout << data[i].mark[j] << " ";            
        cout << "\n";    
    }
} 
 
int main() 
{
    int n;
    cout << "n="; cin>>n;
    
    Student *data = new Student[n];
    
    SetData(data,n);
    PrintData(data,n); 
 
    delete[]data;
    system("pause"); 
    return 0;
}
1
0 / 0 / 0
Регистрация: 16.10.2020
Сообщений: 117
26.02.2021, 21:07  [ТС] 7
Куда посоветуете записывать файл структуры?

Добавлено через 35 секунд
Я сделал запись в документ, мне нужно теперь считать файл и я имею ввиду куда его лучше будет записать?
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
26.02.2021, 21:19 8
relanix, насколько понимаю Вы хотите заполнить массив структур с клавиатуры, записать эти данные в файл
и распечатать данные с файла с дополнительной опцией - средним значением. или нужно как-то по другому ? то есть мне не понятно, что Вы спрашиваете
0
0 / 0 / 0
Регистрация: 16.10.2020
Сообщений: 117
26.02.2021, 21:22  [ТС] 9
Да, все верно, мы заполнили массив структур, записали данные в файл и мне нужно использовать данный файл для решения задачи. Просто не думаю, что это правильно записывать все назад в структуру, можно ли как-то это сделать по другому? к примеру решить сразу с помощью файла не заглядываю в структуру


Вот код, работает верно -
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
#include <iostream>
#include <fstream>
using namespace std;
 
struct Student{
    string surname;
    int mark[4];
 
};
 
 
 
void SetData (Student *data, int n) {
    for (int i = 0; i < n; i++) {
        cout << "Student " << i + 1 << ":\n";
        cout << "Surname: ";
        cin >> data[i].surname;
        cout << "Enter 4 marks: ";
        for (int j = 0; j < 4; j++)
            cin >> data[i].mark[j];
    }
 
}
 
 
void to_file(Student *idk,int n){
    std::cout << "Пишем в файл!" << "\n";
    std::ofstream file("txt1");
    for(size_t i = 0; i < n; i++)
    {   file << idk[i].surname<<"\n";
        for (int j = 0; j < 4; ++j) {
            file << idk[i].mark[j]<<"\n";
        }
    }
    file.close();
}
 
 
bool read_file(Student* idk, int n){
 
    std::cout << "Читаем из файла..." << "\n";
    std::ifstream file("my.txt");
    if (!file.is_open())
    {   std::cout << "Ошибка чтения файла!\n";
        return false;
    }
    for(size_t i = 0; i < n; i++)
    {
        file>>idk[i].surname;
        for (int j = 0; j < 4; ++j) {
            file>>idk[i].mark[j];
        }
    }
    file.close();
    return true;
}
 
 
 
void PrintData (Student *data, int n)
{
    for (int i = 0; i < n; i++)
    {
        cout << data[i].surname << " ";
        for (int j = 0; j < 4; j++)
            cout << data[i].mark[j] << " ";
        cout << "\n";
    }
}
 
 
void find_avg(Student *idk, int n){
 
    int max = 0;
    for (int i = 0; i < n; ++i) {
        cout<<"Имя студента: "<<idk[i].surname<<endl;
 
        for (int j = 0; j < 4; ++j) {
            max = max + idk[i].mark[j];
        }
        max = max / 4;
       cout<<"Средний бал студента: "<<max<<endl;
       max = 0;
    }
}
int main() {
 
    ofstream file("text1");
 
    int count = 0;
    int n;
    cout << "Введите количество студентов" << endl;
    cin >> n;
    Student *idk = new Student[n];
 
    
        SetData(idk,n);
        to_file(idk,n);
        PrintData(idk,n);
        find_avg(idk,n);
 
}
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
26.02.2021, 22:11 10
Цитата Сообщение от relanix Посмотреть сообщение
Просто не думаю, что это правильно записывать все назад в структуру, можно ли как-то это сделать по другому?
так не нужно ничего записывать - просто выведите на печать данные файла. среднее можно записать в файл, а можно и не записывать - подсчитать "на лету" и распечатать

отдельная функция для подсчёта среднего не нужна, функцию PrintData дал Вам для текущего контроля ситуации чтобы Вы её затем переделали на печать строк файла

Добавлено через 9 минут
если Вы не против, переименуйте везде idk на data (данные). тип для среднего double

Добавлено через 7 минут
Цитата Сообщение от relanix Посмотреть сообщение
file << idk[i].surname<<"\n";
не переводите при записи строку (замените "\n" на пробел " ") чтобы можно было затем читать построчно

Добавлено через 13 минут
не забывайте освобождать память:
Цитата Сообщение от Yetty Посмотреть сообщение
delete[]data;
1
0 / 0 / 0
Регистрация: 16.10.2020
Сообщений: 117
26.02.2021, 22:24  [ТС] 11
Немного не понял, как мы можем передать наш файл в принт дата, если структуру нельзя использовать, насчет считать на лету, сейчас буду пробовать.
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
26.02.2021, 22:29 12
relanix, определитесь с вариантом - пишем среднее в файл или нет
0
0 / 0 / 0
Регистрация: 16.10.2020
Сообщений: 117
26.02.2021, 22:37  [ТС] 13
Я наверно неправильно выражаю свои мысли.

Не, в файл мы среднее не пишем, среднее выводим с именем студента. У меня написано в задание вывести соответствующий документ, я изначально подумал что это наверно в файл нужно, но нет, скорее всего в консоль.
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
26.02.2021, 22:47 14
Цитата Сообщение от relanix Посмотреть сообщение
мы среднее не пишем
ок
Цитата Сообщение от relanix Посмотреть сообщение
среднее выводим с именем студента
нет имени. лучше вывести фамилию, оценки и среднее

так в чём вопрос ? допустим в файле в каждой строке записана фамилия и оценки

читаем и печатаем:
C++
1
2
3
4
while(in >> _surname >> m1 >> m2 >> m3 >> m4)
{
    cout << _surname << " " << m1 << " " << m2 << " " << m3 << " " << m4 << " " << (m1+m2+m3+m4)/4. << "\n";
}
1
0 / 0 / 0
Регистрация: 16.10.2020
Сообщений: 117
26.02.2021, 22:52  [ТС] 15
Спасибо, ты мне уже не первый раз серьезно помог.
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
26.02.2021, 22:54 16
чтобы не путаться назовите поток записи out, поток чтения in
ofstream out("text1.txt"); // это уберите из main
ifstream in("text1.txt");
0
26.02.2021, 22:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.02.2021, 22:54
Помогаю со студенческими работами здесь

Найти количество совпадающих компонентов и записать это число в файл H
103. Создать два файла F и G. Найти количество совпадающих компонентов и записать это число в файл...

Найти количество четных элементов матрицы и записать это число в файл
Помогите с программой пожалуйста, Написать программу, которая считывает из внешнего *txt файла 2...

Сделать меню добавления записи, записать это в файл и показать списки
Сделать меню добавления записи,запись в файл и считывание его #include &quot;stdafx.h&quot; #include...

Подсчитать количество чисел в тестовом файле и записать это значение в файл
Задание. 1. Подсчитать количество чисел в тестовом файле и записать это значение в файл....

Ввести данные двумерного массива с клавиатуры, а затем записать это в текстовый файл
Здравствуйте! Помогите, пожалуйста. Задание следующее: Нужно ввести данные двумерного массива с...

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


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

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