72 / 52 / 8
Регистрация: 13.11.2017
Сообщений: 383
1

Организовать запись и чтение файла

16.05.2018, 12:34. Показов 423. Ответов 14
Метки нет (Все метки)

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
#include <iostream>
#include <string>
#include <cstdlib>
#include <iomanip>
#include <fstream>
 
using namespace std;
 
struct table
{    
    table()
    {
        avtor = new char;
        nazvanie = new char;
        gryppa = new char;
        next = NULL;
        }         
    char *avtor;  
    char *nazvanie; 
    int god;  
    char *gryppa; 
    table *next;  
};
 
int main() {
    setlocale (LC_ALL, "rus");
    
    table *phead; 
    table *p;
    phead = new (table);
    p = phead;
    
    while (true)
    {
        int i = 0;
        ++i;
        cout << "\n" << i << " Автор" << endl;
        cin >> p->avtor;
        cout << "\n" << i << " Название" << endl;
        cin >> p->nazvanie;
        cout << "\n" << i << " Год" << endl;
        cin >> p->god;
        cout << "\n" << i << " Группа" << endl;
        cin >> p->gryppa;
        
        cout << "Для окончания нажмите 1. Для продолжения нажмите любой символ" << endl;
        cout << "Продолжаем?" << endl;
         
            int n;
            cin >> n;
            if (n == 1) break;
            else
            {
                p->next = new table();
                p = p->next;
               }
                 
        }
        
 
        
        system("cls");
cout<<"Каталог библиотеки"<<endl;
cout << "----------------------------------------------------------------------------"<<endl;
    cout <<"Автор книги\t" << "Название" << "            " <<"Год выпуска" << "              " << "Группа\t" << endl;
cout << "----------------------------------------------------------------------------"<<endl;
    for (p = phead; p != NULL; p = p->next)
    {       
        cout << p->avtor << setw(6)<< '\t' << p->nazvanie <<setw(14)<< '\t' << p->god <<setw(14)<< '\t' << p->gryppa<< endl;
cout << "----------------------------------------------------------------------------"<<endl;
    }
    cout<<"Примечание: Х - художественная литература; У - учебная литература; С - справочная литература"<<endl;
cout << "----------------------------------------------------------------------------"<<endl;
 
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.05.2018, 12:34
Ответы с готовыми решениями:

Как организовать чтение файла содержащего разнотипные структуры?
Задача следующая есть файл внутренняя структура которого зависит от его же внутренних полей. Вот...

Организовать чтение из типизированого файла в запись
record если в файле name.txt написано simens 3452 5716 nokia 7014 3055 samsung 2410 4512

Надо организовать чтение из файла и запись в файл
Есть массив m на n, надо организовать чтение из файла и запись в файл

Организовать чтение массива из файла, и запись массива в файл
Доброго времени суток! Как организовать чтение массива из файла и вывести массив в файл?

14
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
16.05.2018, 12:48 2
Цитата Сообщение от eganator Посмотреть сообщение
C++
1
avtor = new char;
Не мало одного символа под строку?
0
72 / 52 / 8
Регистрация: 13.11.2017
Сообщений: 383
16.05.2018, 12:54  [ТС] 3
nd2, Всё работает. Или лучше сделать без поля конструктора?
C++
1
2
3
4
5
6
7
struct node {
    char *os, *subd;
    double minop, minvp;
    int cost;
    bool nt;
    node *next;
};
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
16.05.2018, 12:57 4
Цитата Сообщение от eganator Посмотреть сообщение
Всё работает.
Что работает? Выделяешь память под один символ, а вводишь не один?
0
72 / 52 / 8
Регистрация: 13.11.2017
Сообщений: 383
16.05.2018, 12:59  [ТС] 5
nd2, Я же делаю динамически, заранее объём памяти не известен.
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
16.05.2018, 13:02 6
Цитата Сообщение от eganator Посмотреть сообщение
Я же делаю динамически, заранее объём памяти не известен.
И что? Думаешь она у тебя автоматически будет увеличиваться под строку? Это не std::string, тут всё руками нужно делать.
0
72 / 52 / 8
Регистрация: 13.11.2017
Сообщений: 383
16.05.2018, 13:12  [ТС] 7
nd2, Скажите, так правильно будет?
C++
1
2
3
4
5
6
7
table()
    {
        avtor = new char[255];
        nazvanie = new char[255];
        gryppa = new char[255];
        next = NULL;
        }
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
16.05.2018, 13:18 8
Цитата Сообщение от eganator Посмотреть сообщение
так правильно будет?
Правильно, только зачем здесь, вообще, new?
0
72 / 52 / 8
Регистрация: 13.11.2017
Сообщений: 383
16.05.2018, 13:28  [ТС] 9
nd2, Спасибо, что указали на ошибку. new ставил по аналогии с динамическими массивами.
без new компилятор ругается

Добавлено через 8 минут
nd2, Можете подсказать, пожалуйста. Я сделал запись в текстовый файл таким образом:
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
#include <iostream>
#include <string>
#include <cstdlib>
#include <iomanip>
#include <fstream>
 
using namespace std;
 
struct table
{    
    table()
    {
        avtor = new char;
        nazvanie = new char;
        gryppa = new char;
        next = NULL;
        }         
    char *avtor;  
    char *nazvanie; 
    int god;  
    char *gryppa; 
    table *next;  
};
 
int main() {
    setlocale (LC_ALL, "rus");
    
    table *phead; 
    table *p;
    phead = new (table);
    p = phead;
    
    while (true)
    {
        int i = 0;
        ++i;
        cout << "\n" << i << " Автор" << endl;
        cin >> p->avtor;
        cout << "\n" << i << " Название" << endl;
        cin >> p->nazvanie;
        cout << "\n" << i << " Год" << endl;
        cin >> p->god;
        cout << "\n" << i << " Группа" << endl;
        cin >> p->gryppa;
        
        cout << "Для окончания нажмите 1. Для продолжения нажмите любой символ" << endl;
        cout << "Продолжаем?" << endl;
         
            int n;
            cin >> n;
            if (n == 1) break;
            else
            {
                p->next = new table();
                p = p->next;
               }
                 
        }
        
ofstream file("таблица.txt", ios_base::out); 
 
    if (!file.is_open())  
    { 
     cout << "Файл не может быть открыт или создан"; 
     return 1; 
    }
        
        system("cls");
file << "Каталог библиотеки" << endl;
file << "----------------------------------------------------------------------------"<<endl;
    file <<"Автор книги\t" << "Название" << "            " <<"Год выпуска" << "              " << "Группа\t" << endl;
file << "----------------------------------------------------------------------------"<<endl;
    for (p = phead; p != NULL; p = p->next)
    {       
        file << p->avtor << setw(6)<< '\t' << p->nazvanie <<setw(14)<< '\t' << p->god <<setw(14)<< '\t' << p->gryppa<< endl;
file << "----------------------------------------------------------------------------"<<endl;
    }
    file << "Примечание: Х - художественная литература; У - учебная литература; С - справочная литература"<<endl;
file << "----------------------------------------------------------------------------"<<endl;
 
 
}
Но так таблица на экран не выводится. Только в файл. Как можно подправить, чтобы она выводилась и на экране?
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
16.05.2018, 13:33 10
Цитата Сообщение от eganator Посмотреть сообщение
Как можно подправить, чтобы она выводилась и на экране
Вместо file - cout.
0
72 / 52 / 8
Регистрация: 13.11.2017
Сообщений: 383
16.05.2018, 13:35  [ТС] 11
nd2,
Цитата Сообщение от nd2 Посмотреть сообщение
Вместо file - cout.
Но тогда не записывается в файле...
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
16.05.2018, 13:37 12
Цитата Сообщение от eganator Посмотреть сообщение
Но тогда не записывается в файле...
Или дудочка, или кувшинчик? Так трудно сообразить?
0
72 / 52 / 8
Регистрация: 13.11.2017
Сообщений: 383
16.05.2018, 13:59  [ТС] 13
nd2, Нужно, чтобы так и так было
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
16.05.2018, 14:06 14
Цитата Сообщение от eganator Посмотреть сообщение
Нужно, чтобы так и так было
Так и так и сделай.
0
72 / 52 / 8
Регистрация: 13.11.2017
Сообщений: 383
16.05.2018, 14:24  [ТС] 15
nd2, Спасибо, что, помог! Очень хороший совет! Всё прям объяснил, как лучше сделать! С таким же успехом любой может тут советовать
0
16.05.2018, 14:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.05.2018, 14:24
Помогаю со студенческими работами здесь

Как организовать чтение/запись в SQLite?
Приветствую всех! Пишу небольшую утилитку на Java в IDEA CE. Имеется на диске sqlite-файл....

Как организовать чтение и запись в базу файлов?
Всем всего! Я многое пропустил в этой жизни, а хотелось бы наверстать упущенное. Отсюда вопрос:...

MFC Как организовать чтение-поиск-запись в файл?
Смысл таков - есть маленькая игра с 2 пользователями. Требуется сохранять рекорды в...

Организовать чтение исходных данных из файлов и запись результатов
Организовать чтение исходных данных из файлов и запись результатов в файлы. using System; using...


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

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

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