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

Проблема с сохранением/загрузкой данных в/из файла и segmentation fault (core dumped)

10.04.2020, 20:37. Показов 657. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрейшего вечера. При выгрузке данных из файла дата рождения почему-то выводилась не так как надо. После нескольких запусков программы в онлайн компиляторе вообще появилась ошибка segmentation fault. Объясните, пожалуйста, что не так и как это исправить. Скриншоты вводимых данных и ошибочного вывода прилагаются.

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
149
150
151
152
153
154
155
156
157
158
159
160
161
#include <iostream>
#include <string>
#include <stdio.h>
 
using namespace std;
 
struct NOTE
{
    string name;
    string surname;
    double phone;
    int date[3];
};
 
void set_data(NOTE arr[])
{
    for (int i = 0; i < 5; i++)
    {
        cout << i + 1 << "-ый работник" << endl;
        cout << "Имя сотрудника: "; cin >> arr[i].name;
        cout << "Фамилия сотрудника: "; cin >> arr[i].surname;
        cout << "Номер телефона: "; cin >> arr[i].phone;
        cout << "Дата рождения: ";
        for (int j = 0; j < 3; j++) cin >> arr[i].date[j];
        cout << endl;
    }
}
 
void get_data(NOTE arr[])
{
    cout << "Сотрудник\t" << "Номер телефона\t" << "Дата рождения" << endl; // таблица первая
 
    for (int i = 0; i < 5; i++)
    {
        cout.precision(11);
        cout << arr[i].name << " " << arr[i].surname << "\t" << arr[i].phone << "\t";
        for (int j = 0; j < 3; j++) cout << arr[i].date[j] << ".";
        cout << endl;
    }
}
 
void sort_data(NOTE arr[])
{
    for (int i = 1; i < 5; i++) //сортировка по мобиле
    {
        if ((arr[i].phone / 100000000) < (arr[i - 1].phone / 100000000))
        {
            swap(arr[i], arr[i - 1]);  //смена местами
        }
    }
    cout << "Сотрудник\t" << "Номер телефона\t" << "Дата рождения" << endl; // таблица вторая
 
    for (int i = 0; i < 5; i++)
    {
        cout.precision(11);
        cout << arr[i].name << " " << arr[i].surname << "\t" << arr[i].phone << "\t";
        for (int j = 0; j < 3; j++) cout << arr[i].date[j] << ".";
        cout << endl;
    }
}
 
void save_file(NOTE arr[])   // запись в файл
{
    FILE* file;
    if ((file = fopen("labadesat.txt", "w")) == NULL)
        printf("Ошибка открытия файла!\n");
    else
    {
        for (int i = 0; i < 5; i++)
        {
            fprintf(file, "%s\t%s\t\t%11d\t%8d\n", &arr[i].name, &arr[i].surname, &arr[i].phone, &arr[i].date);
        }
        fclose(file);
    }
}
 
void open_file(NOTE arr[])  // загрузить из файла
{
    FILE* file;
    if ((file = fopen("labadesat.txt", "r")) == NULL)
        printf("Ошибка открытия файла!");
    else
    {
        cout << "Сотрудник\t" << "Номер телефона\t" << "Дата рождения" << endl;
        for (int i = 0; i < 5; i++)
        {
            fscanf(file, "%s\t%s\t\t%11d\t%8d\n", &arr[i].name, &arr[i].surname, &arr[i].phone, &arr[i].date);
            cout << arr[i].name << " " << arr[i].surname << "\t" << arr[i].phone << "\t"; 
            for (int j = 0; j < 3; j++) cout << arr[i].date[j] << ".";
            cout << endl;
        }
        fclose(file);
    }
}
 
void surname_sort(NOTE arr[])
{
    string surnam;  //surname занято
    int ch = 0;     //новая перем для исп в цикле
    cout << "Фамилия сотрудника: ";
    cin >> surnam;
 
    for (int i = 0; i < 5; i++)
    {
        if (arr[i].surname == surnam)
        {
            cout.precision(11);
            cout << "Сотрудник: " << arr[i].name << " " << arr[i].surname << " Номер телефона: " << arr[i].phone << " Дата рождения: ";
            for (int j = 0; j < 3; j++) cout << arr[i].date[j] << ".";
            cout << endl;
            ch++;
        }
    }
    if (ch == 0) cout << "Нет людей с такой фамилией." << endl;
}
 
int main()
{
    setlocale(LC_ALL, "RUS");
 
    NOTE arr[5];
    int vb;
 
    while (true)
    {
        cout << "\tБаза данных о сотрудниках\n";
        cout << "Выберите операцию из списка:\n";
        cout << "1.Ввести сотрудников\n";
        cout << "2.Вывести данные о сотрудниках\n";
        cout << "3.Отсортировать работников по номеру телефона\n";
        cout << "4.Сохранить данные в файл\n";
        cout << "5.Загрузить данные из файла\n";
        cout << "6.Информация о сотруднике\n";
        cout << "Ваш выбор: "; cin >> vb;
 
        switch (vb)
        {
        case 1:
            set_data(arr);
            break;
        case 2:
            get_data(arr);
            break;
        case 3:
            sort_data(arr);
            break;
        case 4:
            save_file(arr);
            break;
        case 5:
            open_file(arr);
            break;
        case 6:
            surname_sort(arr);
            break;
        default:
            cout << "Ошибка!";
            break;
        }
    }
}
Миниатюры
Проблема с сохранением/загрузкой данных в/из файла и segmentation fault (core dumped)   Проблема с сохранением/загрузкой данных в/из файла и segmentation fault (core dumped)  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.04.2020, 20:37
Ответы с готовыми решениями:

Segmentation fault (core dumped)
Добрый день. Подскажите, при перемножении матриц более чем 600х600, появляется ошибка Segmentation...

Segmentation fault (core dumped)
Добрый вечер. При вводе любых чисел, кроме 0 - й, выводит ошибку. #include &lt;iostream&gt; void...

Segmentation fault(core dumped)
#include &lt;iostream&gt; int replace1(char *ptr, char c, char m); int main() { char *ptr =...

Segmentation fault (core dumped)
Доброго времени суток. Задача примерно такая. Сделать структуру с данными, класс List для...

3
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
10.04.2020, 21:34 2
Цитата Сообщение от k1deg Посмотреть сообщение
C++
87
fscanf(file, "%s\t%s\t\t%11d\t%8d\n", &arr[i].name, &arr[i].surname, &arr[i].phone, &arr[i].date);
Это кто ж научил так поступать с данными типа std::string? В строке 71 та же фигня.
0
0 / 0 / 0
Регистрация: 10.04.2020
Сообщений: 6
11.04.2020, 20:48  [ТС] 3
Тогда как исправить? И в этом ли вообще основная проблема?
0
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
11.04.2020, 20:52 4
Цитата Сообщение от k1deg Посмотреть сообщение
И в этом ли вообще основная проблема?
В этом, да.

Цитата Сообщение от k1deg Посмотреть сообщение
Тогда как исправить?
Используйте std::fstream для работы с файлами.
0
11.04.2020, 20:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.04.2020, 20:52
Помогаю со студенческими работами здесь

Ошибка: Segmentation fault (core dumped)
Вот недокод: #include &lt;bits/stdc++.h&gt; using namespace std; int main() { int ans = 0; ...

Объединение двух деревьев бинарного поиска ( Segmentation fault (core dumped) )
Блин, народ, сломал голову. Вроде алгоритм простенький, но не работает. Нужно объединить два...

Segmentation fault(Core dumped)
#include &lt;math.h&gt; #include &lt;stdio.h&gt; #include &lt;iostream&gt; using namespace std; int main() {...

XDestroyImage(image); Segmentation fault (core dumped)
Здравствуйте, подскажите пожалуйста как быть. при вызове функции XDestroyImage(image); происходит...

Segmentation fault (core dumped) при большом размере массива
При большом размере массива (при перекомпиляции размера массива при котором вылезает ошибка...

Метаданные файла Segmentation Fault (core dumped)
Всем привет, совсем недавно начал изучать Linux и не пойму в чем дело....подскажите пожалуйста:...


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

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