Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
19 / 0 / 0
Регистрация: 01.03.2019
Сообщений: 52

Вывод динамических структур в виде таблицы

21.05.2019, 06:50. Показов 3618. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Сразу извиняюсь за программу, но пока по другому не умею У меня проблема, что введенные данные пользователем не отображаются при выводе таблицы. Помогите, пожалуйста, решить эту проблему...
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
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <windows.h>
#include <stdio.h>
#include <fstream>
#include <iomanip>
 
 
using namespace std;
int strok;
 
void koord(int x, int y) { //Функция создает плоскость с координатами 
    COORD coord;
    coord.X = x;
    coord.Y = y;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
 
struct biblioteka {
    char avtor; //Автор
    char nazvanie; //Навзание
    int god; //Год
    char gruppa; //Группа
};
 
struct Katalog {
    biblioteka el;
    Katalog *next, *last; //Указатели на первый и последний элемент в списке
};
 
void choice() {
    cout << "Меню:" << endl;
    cout << "1) Создание строки таблицы" << endl;
    cout << "2) Редактирование таблицы" << endl;
    cout << "3) Вывод таблицы" << endl;
    cout << "4) Сохранение таблицы" << endl;
    cout << "5) Загрузка таблицы" << endl;
    cout << "6) Выход из программы" << endl;
}
 
Katalog* getLast(Katalog *head) { //Поиск последней записи
    if (head == 0) { //Если записей нет
        return 0; //прекратить действия
    }
    while (head->next) {
        head = head->next; //Переход к следующему элементу head
    }
    return head; //Продолжить работу с последней записью
}
 
 
 
void novaya_stroka(Katalog **head, char avtor, char nazvanie, int god, char gruppa) { //Создание строк таблицы
    Katalog *last = getLast (*head);
    Katalog *vrem = new Katalog; //Создание нового каталога
    vrem->el.avtor = avtor; // Запись временных элементов
    vrem->el.nazvanie = nazvanie;
    vrem->el.god = god;
    vrem->el.gruppa = gruppa;
    vrem->next = 0;
    if (*head != 0) { //Если в списке есть записи
        last->next = vrem; //, то последняя запись становится следующей, равная временным элементам
    }
    if (*head == 0) { //Если в списке нет записей
        (*head) = vrem; // сделать запись 
    }
}
 
void vvod_el (Katalog *head, char avtor, char nazvanie, int god, char gruppa, int kol_str) { //Введение информации
int t;
cout << endl << "Примечание: для ввода группы используйте следующие абривиатуры :" << endl << "1) X - художественная литуратура"
<< endl << "2) Y - учебная литература" << endl << "3) C - справочная литература" << endl;
    for (;;) {
        cout << "Введите автора книги - ";
        cin >> avtor;
        if (isalpha(avtor) ) {
            cout << "Введите название книги - ";
            cin.clear();
            cin.sync();
            cin >> nazvanie;
            for (;;) {
                cout << "Введите год написания книги - ";
                cin.clear();
                cin.sync();
                cin >> god;
                if (god > 0) {
                    for (;;) {
                        cout << "Введите группу литературы - ";
                        cin.clear();
                        cin.sync();
                        cin >> gruppa;
                        cout << endl;
                        if ((gruppa == 'X') || (gruppa == 'Y') || (gruppa == 'C')) {
                            cout << endl;
                            return;
                        }
                        else {
                            cout << "ВНИМАНИЕ! Некорректный ввод группы, повторите ввод." << endl;
                        }
                        cin.clear();
                        cin.sync();
                    }
                }
                else {
                    cout << "ВНИМАНИЕ! Некорректный год, повторите ввод." << endl;
                }
            cin.clear();
            cin.sync();
            }
            
        }
        else {
            cout << endl << "ВНИМАНИЕ! Некорректное имя автора, повторите ввод. " << endl;
        }
        cin.clear();
        cin.sync();
    }
}
 
void table (Katalog *head, char avtor, char nazvanie, int god, char gruppa, int kol_str) {
    cout << "===========================================================================================" << endl;
    cout << "Каталог библиотеки" << endl;
    cout << "===========================================================================================" << endl;
    cout << left << setw(30) << "|Автор книги"
        << setw(30) << "|Название"
        << setw(15) << "|Год выпуска"
        << setw(15) << "|Группа"
        << endl;
    for (int i = 0; i < kol_str; i++) {
    cout << "-------------------------------------------------------------------------------------------" << endl;  
        while (head) {
        cout << left << setw(31) << head->el.avtor
            << setw(31) << head->el.nazvanie
            << setw(16) << head->el.god
            << setw(16) << head->el.gruppa;
            head = head->next;
        }
        cout << endl;
    }
    cout << "===========================================================================================" << endl;
    cout << endl;
}
 
int main() {
    setlocale(LC_ALL, "RUS");
    int check, check_2, god, kol_str;
    char avtor, nazvanie, gruppa;
    Katalog* head = NULL;
    kol_str = 0;
    choice();
    cout << endl <<"Выберите действие и введите соответствующую цифру - ";
    for (;;) { //Бесконечный цикл
        cin >> check;
        if (check == 1) {//Создание строк таблицы
            kol_str = kol_str + 1;
            vvod_el (head, avtor, nazvanie, god, gruppa, kol_str);
            novaya_stroka (&head, avtor, nazvanie, god, gruppa);
            cin.clear();
            cin.sync();
            for (;;) {
                cout << endl;
                for (;;) {
                    cout << "Выберите действие и введите соответствующую цифру - ";
                    cin >> check_2;
                    if (check_2 == 1) { //Создание строки таблицы
                        kol_str = kol_str + 1;
                        vvod_el (head, avtor, nazvanie, god, gruppa, kol_str);
                        novaya_stroka (&head, avtor, nazvanie, god, gruppa);
                    }
                    else if (check_2 == 2) { //Редактирование таблицы
 
                    }
                    else if (check_2 == 3) { //Вывод таблицы
                        system("cls"); //Очищение консоли
                        table(head, avtor, nazvanie, god, gruppa, kol_str);
                        choice();
                    }
                    else if (check_2 == 4) { //Сохранение
 
                    }
                    else if (check_2 == 5) { //Загрузка
                    
                    }
                    else if (check_2 == 6) { // Выход из программы
                        return 0;
                    }
                    else {
                        cout << endl << "ВНИМАНИЕ!" << endl << "Значение команды некорректно. Попробуйте ещё раз." << endl << endl;
                    }
                    cin.clear(); //Обнуление значения для повторного ввода
                    cin.sync();
                }
                cin.clear(); //Обнуление значения для повторного ввода
                cin.sync();
                cout << endl << "ВНИМАНИЕ!" << endl << "Количество строк введено некорректно. Проверьте и попробуйте ещё раз." << endl << endl;
            }       
        }
        cin.clear();
        cin.sync();
        cout << endl << "ВНИМАНИЕ!" << endl << "Таблица не создана, действие невозможно. Выберите соответствующее действие, что бы создать первые строки таблицы." << endl << endl;
        cout << "Выберите действие - ";
    }
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.05.2019, 06:50
Ответы с готовыми решениями:

Вывод массива структур в табличном виде
Вот код для каталог строительных материалов, но почему-то таблица странно смещается вправо, как можно исправить? #include...

Вывод чисел в виде таблицы
Нужно вывести числа в виде следующей таблицы: 5 5 5 5 5 4 4 4 4 3 3 3 2 2 1 Вот мой код: #include &quot;stdafx.h&quot;

Вывод результата в виде таблицы
Задача: Задан коэффициенты многочлена Рn = a0+ a1*x1+ a2*x2+…an*xn . Найти К-тую производную многчлена Решение: #include...

13
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
21.05.2019, 09:26
Цитата Сообщение от Apassiya Посмотреть сообщение
char avtor, nazvanie, gruppa;
Эти переменные сейчас объявлены как символы, один байт. Что-то мне подсказывает, что здесь должны быть строки, std::string, либо char avtor[128], nazvanie[128], gruppa[128];

Добавлено через 1 минуту
То же самое для struct biblioteka
C++
1
2
3
4
5
6
struct biblioteka {
    std::string avtor; //Автор
    std::string nazvanie; //Навзание
    int god; //Год
    std::string gruppa; //Группа
};
1
19 / 0 / 0
Регистрация: 01.03.2019
Сообщений: 52
21.05.2019, 09:56  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Эти переменные сейчас объявлены как символы, один байт. Что-то мне подсказывает, что здесь должны быть строки, std::string, либо char avtor[128], nazvanie[128], gruppa[128];

Добавлено через 1 минуту
То же самое для struct biblioteka
C++
1
2
3
4
5
6
struct biblioteka {
    std::string avtor; //Автор
    std::string nazvanie; //Навзание
    int god; //Год
    std::string gruppa; //Группа
};
Я, вроде, исправила, но толку 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
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
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <windows.h>
#include <stdio.h>
#include <fstream>
#include <iomanip>
 
 
using namespace std;
int strok;
 
void koord(int x, int y) { //Функция создает плоскость с координатами 
    COORD coord;
    coord.X = x;
    coord.Y = y;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
 
struct biblioteka {
    char avtor[128]; //Автор
    char nazvanie[128]; //Навзание
    int god; //Год
    char gruppa[128]; //Группа
};
 
struct Katalog {
    biblioteka el;
    Katalog *next, *last; //Указатели на первый и последний элемент в списке
};
 
void choice() {
    cout << "Меню:" << endl;
    cout << "1) Создание строки таблицы" << endl;
    cout << "2) Редактирование таблицы" << endl;
    cout << "3) Вывод таблицы" << endl;
    cout << "4) Сохранение таблицы" << endl;
    cout << "5) Загрузка таблицы" << endl;
    cout << "6) Выход из программы" << endl;
}
 
Katalog* getLast(Katalog *head) { //Поиск последней записи
    if (head == 0) { //Если записей нет
        return 0; //прекратить действия
    }
    while (head->next) {
        head = head->next; //Переход к следующему элементу head
    }
    return head; //Продолжить работу с последней записью
}
 
 
 
void novaya_stroka(Katalog **head, char avtor, char nazvanie, int god, char gruppa) { //Создание строк таблицы
    Katalog *last = getLast (*head);
    Katalog *vrem = new Katalog; //Создание нового каталога
    vrem->el.avtor[128] = avtor; // Запись временных элементов
    vrem->el.nazvanie[128] = nazvanie;
    vrem->el.god = god;
    vrem->el.gruppa[128] = gruppa;
    vrem->next = 0;
    if (*head != 0) { //Если в списке есть записи
        last->next = vrem; //, то последняя запись становится следующей, равная временным элементам
    }
    if (*head == 0) { //Если в списке нет записей
        (*head) = vrem; // сделать запись 
    }
}
 
void vvod_el (Katalog *head, char avtor, char nazvanie, int god, char gruppa, int kol_str) { //Введение информации
int t;
cout << endl << "Примечание: для ввода группы используйте следующие абривиатуры :" << endl << "1) X - художественная литуратура"
<< endl << "2) Y - учебная литература" << endl << "3) C - справочная литература" << endl;
    for (;;) {
        cout << "Введите автора книги - ";
        cin >> avtor;
        if (isalpha(avtor) ) {
            cout << "Введите название книги - ";
            cin.clear();
            cin.sync();
            cin >> nazvanie;
            for (;;) {
                cout << "Введите год написания книги - ";
                cin.clear();
                cin.sync();
                cin >> god;
                if (god > 0) {
                    for (;;) {
                        cout << "Введите группу литературы - ";
                        cin.clear();
                        cin.sync();
                        cin >> gruppa;
                        cout << endl;
                        if ((gruppa == 'X') || (gruppa == 'Y') || (gruppa == 'C')) {
                            cout << endl;
                            return;
                        }
                        else {
                            cout << "ВНИМАНИЕ! Некорректный ввод группы, повторите ввод." << endl;
                        }
                        cin.clear();
                        cin.sync();
                    }
                }
                else {
                    cout << "ВНИМАНИЕ! Некорректный год, повторите ввод." << endl;
                }
            cin.clear();
            cin.sync();
            }
            
        }
        else {
            cout << endl << "ВНИМАНИЕ! Некорректное имя автора, повторите ввод. " << endl;
        }
        cin.clear();
        cin.sync();
    }
}
 
void table (Katalog *head, char avtor, char nazvanie, int god, char gruppa, int kol_str) {
    cout << "===========================================================================================" << endl;
    cout << "Каталог библиотеки" << endl;
    cout << "===========================================================================================" << endl;
    cout << left << setw(30) << "|Автор книги"
        << setw(30) << "|Название"
        << setw(15) << "|Год выпуска"
        << setw(15) << "|Группа"
        << endl;
    for (int i = 0; i < kol_str; i++) {
    cout << "-------------------------------------------------------------------------------------------" << endl;  
        while (head) {
        cout << left << setw(31) << head->el.avtor
            << setw(31) << head->el.nazvanie
            << setw(16) << head->el.god
            << setw(16) << head->el.gruppa;
            head = head->next;
        }
        cout << endl;
    }
    cout << "===========================================================================================" << endl;
    cout << endl;
}
 
int main() {
    setlocale(LC_ALL, "RUS");
    int check, check_2, god, kol_str;
    char avtor[128];
    char nazvanie[128]; 
    char gruppa[128];
    Katalog* head = NULL;
    kol_str = 0;
    choice();
    cout << endl <<"Выберите действие и введите соответствующую цифру - ";
    for (;;) { //Бесконечный цикл
        cin >> check;
        if (check == 1) {//Создание строк таблицы
            kol_str = kol_str + 1;
            vvod_el (head, avtor[128], nazvanie[128], god, gruppa[128], kol_str);
            novaya_stroka (&head, avtor[128], nazvanie[128], god, gruppa[128]);
            cin.clear();
            cin.sync();
            for (;;) {
                cout << endl;
                for (;;) {
                    cout << "Выберите действие и введите соответствующую цифру - ";
                    cin >> check_2;
                    if (check_2 == 1) { //Создание строки таблицы
                        kol_str = kol_str + 1;
                        vvod_el (head, avtor[128], nazvanie[128], god, gruppa[128], kol_str);
                        novaya_stroka (&head, avtor[128], nazvanie[128], god, gruppa[128]);
                    }
                    else if (check_2 == 2) { //Редактирование таблицы
 
                    }
                    else if (check_2 == 3) { //Вывод таблицы
                        system("cls"); //Очищение консоли
                        table(head, avtor[128], nazvanie[128], god, gruppa[128], kol_str);
                        choice();
                    }
                    else if (check_2 == 4) { //Сохранение
 
                    }
                    else if (check_2 == 5) { //Загрузка
                    
                    }
                    else if (check_2 == 6) { // Выход из программы
                        return 0;
                    }
                    else {
                        cout << endl << "ВНИМАНИЕ!" << endl << "Значение команды некорректно. Попробуйте ещё раз." << endl << endl;
                    }
                    cin.clear(); //Обнуление значения для повторного ввода
                    cin.sync();
                }
                cin.clear(); //Обнуление значения для повторного ввода
                cin.sync();
                cout << endl << "ВНИМАНИЕ!" << endl << "Количество строк введено некорректно. Проверьте и попробуйте ещё раз." << endl << endl;
            }       
        }
        cin.clear();
        cin.sync();
        cout << endl << "ВНИМАНИЕ!" << endl << "Таблица не создана, действие невозможно. Выберите соответствующее действие, что бы создать первые строки таблицы." << endl << endl;
        cout << "Выберите действие - ";
    }
    return 0;
}
Миниатюры
Вывод динамических структур в виде таблицы  
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
21.05.2019, 10:10
Цитата Сообщение от Apassiya Посмотреть сообщение
Я, вроде, исправила, но толку 0.
Не везде исправила

C++
1
2
3
4
5
6
7
void novaya_stroka(Katalog **head, const char *avtor, const char *nazvanie, int god, const char *gruppa) { //Создание строк таблицы
    Katalog *last = getLast (*head);
    Katalog *vrem = new Katalog; //Создание нового каталога
   
 
 strcpy(vrem->el.avtor, avtor); // Запись временных элементов
 strcpy(vrem->el.nazvanie, nazvanie);
Ну и в других местах по-аналогии
1
19 / 0 / 0
Регистрация: 01.03.2019
Сообщений: 52
21.05.2019, 11:00  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Не везде исправила

C++
1
2
3
4
5
6
7
void novaya_stroka(Katalog **head, const char *avtor, const char *nazvanie, int god, const char *gruppa) { //Создание строк таблицы
    Katalog *last = getLast (*head);
    Katalog *vrem = new Katalog; //Создание нового каталога
   
 
 strcpy(vrem->el.avtor, avtor); // Запись временных элементов
 strcpy(vrem->el.nazvanie, nazvanie);
Ну и в других местах по-аналогии
Извините, не могли бы Вы ещё раз посмотреть?
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
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <windows.h>
#include <stdio.h>
#include <fstream>
#include <iomanip>
 
 
using namespace std;
int strok;
 
void koord(int x, int y) { //Функция создает плоскость с координатами 
    COORD coord;
    coord.X = x;
    coord.Y = y;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
 
struct biblioteka {
    char avtor[128]; //Автор
    char nazvanie[128]; //Навзание
    int god; //Год
    char gruppa[128]; //Группа
};
 
struct Katalog {
    biblioteka el;
    Katalog *next, *last; //Указатели на первый и последний элемент в списке
};
 
void choice() {
    cout << "Меню:" << endl;
    cout << "1) Создание строки таблицы" << endl;
    cout << "2) Редактирование таблицы" << endl;
    cout << "3) Вывод таблицы" << endl;
    cout << "4) Сохранение таблицы" << endl;
    cout << "5) Загрузка таблицы" << endl;
    cout << "6) Выход из программы" << endl;
}
 
Katalog* getLast(Katalog *head) { //Поиск последней записи
    if (head == 0) { //Если записей нет
        return 0; //прекратить действия
    }
    while (head->next) {
        head = head->next; //Переход к следующему элементу head
    }
    return head; //Продолжить работу с последней записью
}
 
 
 
void novaya_stroka(Katalog **head, char avtor[128], char nazvanie[128], int god, char gruppa[128]) { //Создание строк таблицы
    Katalog *last = getLast (*head);
    Katalog *vrem = new Katalog; //Создание нового каталога
    strcpy(vrem->el.avtor, avtor); // Запись временных элементов
    strcpy(vrem->el.nazvanie, nazvanie);
    vrem->el.god = god;
    strcpy(vrem->el.gruppa, gruppa);
    vrem->next = 0;
    if (*head != 0) { //Если в списке есть записи
        last->next = vrem; //, то последняя запись становится следующей, равная временным элементам
    }
    if (*head == 0) { //Если в списке нет записей
        (*head) = vrem; // сделать запись 
    }
}
 
void vvod_el (Katalog *head, char avtor[128], char nazvanie[128], int god, char gruppa[128], int kol_str) { //Введение информации
int t;
cout << endl << "Примечание: для ввода группы используйте следующие абривиатуры :" << endl << "1) X - художественная литуратура"
<< endl << "2) Y - учебная литература" << endl << "3) C - справочная литература" << endl;
    for (;;) {
        cout << "Введите автора книги - ";
        cin >> avtor[128];
        if (isalpha(avtor[128]) ) {
            cout << "Введите название книги - ";
            cin.clear();
            cin.sync();
            cin >> nazvanie[128];
            for (;;) {
                cout << "Введите год написания книги - ";
                cin.clear();
                cin.sync();
                cin >> god;
                if (god > 0) {
                    for (;;) {
                        cout << "Введите группу литературы - ";
                        cin.clear();
                        cin.sync();
                        cin >> gruppa[128];
                        cout << endl;
                        if ((gruppa[128] == 'X') || (gruppa[128] == 'Y') || (gruppa[128] == 'C')) {
                            cout << endl;
                            return;
                        }
                        else {
                            cout << "ВНИМАНИЕ! Некорректный ввод группы, повторите ввод." << endl;
                        }
                        cin.clear();
                        cin.sync();
                    }
                }
                else {
                    cout << "ВНИМАНИЕ! Некорректный год, повторите ввод." << endl;
                }
            cin.clear();
            cin.sync();
            }
            
        }
        else {
            cout << endl << "ВНИМАНИЕ! Некорректное имя автора, повторите ввод. " << endl;
        }
        cin.clear();
        cin.sync();
    }
}
 
void table (Katalog *head, char avtor[128], char nazvanie[128], int god, char gruppa[128], int kol_str) {
    cout << "===========================================================================================" << endl;
    cout << "Каталог библиотеки" << endl;
    cout << "===========================================================================================" << endl;
    cout << left << setw(30) << "|Автор книги"
        << setw(30) << "|Название"
        << setw(15) << "|Год выпуска"
        << setw(15) << "|Группа"
        << endl;
    for (int i = 0; i < kol_str; i++) {
    cout << "-------------------------------------------------------------------------------------------" << endl;  
        while (head) {
        cout << left << setw(31) << strcpy(head->el.avtor,avtor)
            << setw(31) << strcpy(head->el.nazvanie,nazvanie)
            << setw(16) << head->el.god
            << setw(16) << strcpy(head->el.gruppa, gruppa);
            head = head->next;
        }
        cout << endl;
    }
    cout << "===========================================================================================" << endl;
    cout << endl;
}
 
int main() {
    setlocale(LC_ALL, "RUS");
    int check, check_2, god, kol_str;
    char avtor[128];
    char nazvanie[128]; 
    char gruppa[128];
    Katalog* head = NULL;
    kol_str = 0;
    choice();
    cout << endl <<"Выберите действие и введите соответствующую цифру - ";
    for (;;) { //Бесконечный цикл
        cin >> check;
        if (check == 1) {//Создание строк таблицы
            kol_str = kol_str + 1;
            vvod_el (head, avtor, nazvanie, god, gruppa, kol_str);
            novaya_stroka (&head, avtor, nazvanie, god, gruppa);
            cin.clear();
            cin.sync();
            for (;;) {
                cout << endl;
                for (;;) {
                    cout << "Выберите действие и введите соответствующую цифру - ";
                    cin >> check_2;
                    if (check_2 == 1) { //Создание строки таблицы
                        kol_str = kol_str + 1;
                        vvod_el (head, avtor, nazvanie, god, gruppa, kol_str);
                        novaya_stroka (&head, avtor, nazvanie, god, gruppa);
                    }
                    else if (check_2 == 2) { //Редактирование таблицы
 
                    }
                    else if (check_2 == 3) { //Вывод таблицы
                        system("cls"); //Очищение консоли
                        table(head, avtor, nazvanie, god, gruppa, kol_str);
                        choice();
                    }
                    else if (check_2 == 4) { //Сохранение
 
                    }
                    else if (check_2 == 5) { //Загрузка
                    
                    }
                    else if (check_2 == 6) { // Выход из программы
                        return 0;
                    }
                    else {
                        cout << endl << "ВНИМАНИЕ!" << endl << "Значение команды некорректно. Попробуйте ещё раз." << endl << endl;
                    }
                    cin.clear(); //Обнуление значения для повторного ввода
                    cin.sync();
                }
                cin.clear(); //Обнуление значения для повторного ввода
                cin.sync();
                cout << endl << "ВНИМАНИЕ!" << endl << "Количество строк введено некорректно. Проверьте и попробуйте ещё раз." << endl << endl;
            }       
        }
        cin.clear();
        cin.sync();
        cout << endl << "ВНИМАНИЕ!" << endl << "Таблица не создана, действие невозможно. Выберите соответствующее действие, что бы создать первые строки таблицы." << endl << endl;
        cout << "Выберите действие - ";
    }
    return 0;
}
Результат при вводе - e,r,3,X
е и r - ещё как то отображаются, но что обозначают другие символы? И почему цифра 3 не выводится?
Миниатюры
Вывод динамических структур в виде таблицы  
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
21.05.2019, 11:12
Цитата Сообщение от Apassiya Посмотреть сообщение
void novaya_stroka(Katalog **head, char avtor[128], char nazvanie[128], int god, char gruppa[128]) { //Создание строк таблицы
Я ж по-другому здесь написал, const char *

Добавлено через 53 секунды
Цитата Сообщение от Apassiya Посмотреть сообщение
cout << left << setw(31) << strcpy(head->el.avtor,avtor)
* * * * * * << setw(31) << strcpy(head->el.nazvanie,nazvanie)
* * * * * * << setw(16) << head->el.god
* * * * * * << setw(16) << strcpy(head->el.gruppa, gruppa);
Здесь не надо strcpy, << setw(31) << head->el.nazvanie

Добавлено через 1 минуту
Цитата Сообщение от Apassiya Посмотреть сообщение
void table (Katalog *head, char avtor[128], char nazvanie[128], int god, char gruppa[128], int kol_str) {
Здесь вроде параметры не нужны, нужно только void table(Katalog *head)
1
19 / 0 / 0
Регистрация: 01.03.2019
Сообщений: 52
21.05.2019, 11:23  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Я ж по-другому здесь написал, const char *

Добавлено через 53 секунды

Здесь не надо strcpy, << setw(31) << head->el.nazvanie

Добавлено через 1 минуту

Здесь вроде параметры не нужны, нужно только void table(Katalog *head)
Ничего не изменилось.

Добавлено через 7 минут
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Я ж по-другому здесь написал, const char *

Добавлено через 53 секунды

Здесь не надо strcpy, << setw(31) << head->el.nazvanie

Добавлено через 1 минуту

Здесь вроде параметры не нужны, нужно только void table(Katalog *head)
После дополнительных изменений тоже ничего...
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
21.05.2019, 11:25
Цитата Сообщение от Apassiya Посмотреть сообщение
осле дополнительных изменений тоже ничего...
Покажи код
1
19 / 0 / 0
Регистрация: 01.03.2019
Сообщений: 52
21.05.2019, 11:28  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Покажи код
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
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <windows.h>
#include <stdio.h>
#include <fstream>
#include <iomanip>
 
 
using namespace std;
int strok;
 
void koord(int x, int y) { //Функция создает плоскость с координатами 
    COORD coord;
    coord.X = x;
    coord.Y = y;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
 
struct biblioteka {
    char avtor[128]; //Автор
    char nazvanie[128]; //Навзание
    int god; //Год
    char gruppa[128]; //Группа
};
 
struct Katalog {
    biblioteka el;
    Katalog *next, *last; //Указатели на первый и последний элемент в списке
};
 
void choice() {
    cout << "Меню:" << endl;
    cout << "1) Создание строки таблицы" << endl;
    cout << "2) Редактирование таблицы" << endl;
    cout << "3) Вывод таблицы" << endl;
    cout << "4) Сохранение таблицы" << endl;
    cout << "5) Загрузка таблицы" << endl;
    cout << "6) Выход из программы" << endl;
}
 
Katalog* getLast(Katalog *head) { //Поиск последней записи
    if (head == 0) { //Если записей нет
        return 0; //прекратить действия
    }
    while (head->next) {
        head = head->next; //Переход к следующему элементу head
    }
    return head; //Продолжить работу с последней записью
}
 
 
 
void novaya_stroka(Katalog **head, const char avtor[128], const char nazvanie[128], int god, const char gruppa[128]) { //Создание строк таблицы
    Katalog *last = getLast (*head);
    Katalog *vrem = new Katalog; //Создание нового каталога
    strcpy(vrem->el.avtor, avtor); // Запись временных элементов
    strcpy(vrem->el.nazvanie, nazvanie);
    vrem->el.god = god;
    strcpy(vrem->el.gruppa, gruppa);
    vrem->next = 0;
    if (*head != 0) { //Если в списке есть записи
        last->next = vrem; //, то последняя запись становится следующей, равная временным элементам
    }
    if (*head == 0) { //Если в списке нет записей
        (*head) = vrem; // сделать запись 
    }
}
 
void vvod_el (Katalog *head, char avtor[128], char nazvanie[128], int god, char gruppa[128], int kol_str) { //Введение информации
int t;
cout << endl << "Примечание: для ввода группы используйте следующие абривиатуры :" << endl << "1) X - художественная литуратура"
<< endl << "2) Y - учебная литература" << endl << "3) C - справочная литература" << endl;
    for (;;) {
        cout << "Введите автора книги - ";
        cin >> avtor[128];
        if (isalpha(avtor[128]) ) {
            cout << "Введите название книги - ";
            cin.clear();
            cin.sync();
            cin >> nazvanie[128];
            for (;;) {
                cout << "Введите год написания книги - ";
                cin.clear();
                cin.sync();
                cin >> god;
                if (god > 0) {
                    for (;;) {
                        cout << "Введите группу литературы - ";
                        cin.clear();
                        cin.sync();
                        cin >> gruppa[128];
                        cout << endl;
                        if ((gruppa[128] == 'X') || (gruppa[128] == 'Y') || (gruppa[128] == 'C')) {
                            cout << endl;
                            return;
                        }
                        else {
                            cout << "ВНИМАНИЕ! Некорректный ввод группы, повторите ввод." << endl;
                        }
                        cin.clear();
                        cin.sync();
                    }
                }
                else {
                    cout << "ВНИМАНИЕ! Некорректный год, повторите ввод." << endl;
                }
            cin.clear();
            cin.sync();
            }
            
        }
        else {
            cout << endl << "ВНИМАНИЕ! Некорректное имя автора, повторите ввод. " << endl;
        }
        cin.clear();
        cin.sync();
    }
}
 
void table (Katalog *head, int kol_str) {
    cout << "===========================================================================================" << endl;
    cout << "Каталог библиотеки" << endl;
    cout << "===========================================================================================" << endl;
    cout << left << setw(30) << "|Автор книги"
        << setw(30) << "|Название"
        << setw(15) << "|Год выпуска"
        << setw(15) << "|Группа"
        << endl;
    for (int i = 0; i < kol_str; i++) {
    cout << "-------------------------------------------------------------------------------------------" << endl;  
        while (head) {
        cout << left << setw(31) << head->el.avtor
            << setw(31) << head->el.nazvanie
            << setw(16) << head->el.god
            << setw(16) << head->el.gruppa;
            head = head->next;
        }
        cout << endl;
    }
    cout << "===========================================================================================" << endl;
    cout << endl;
}
 
int main() {
    setlocale(LC_ALL, "RUS");
    int check, check_2, god, kol_str;
    char avtor[128];
    char nazvanie[128]; 
    char gruppa[128];
    Katalog* head = NULL;
    kol_str = 0;
    choice();
    cout << endl <<"Выберите действие и введите соответствующую цифру - ";
    for (;;) { //Бесконечный цикл
        cin >> check;
        if (check == 1) {//Создание строк таблицы
            kol_str = kol_str + 1;
            vvod_el (head, avtor, nazvanie, god, gruppa, kol_str);
            novaya_stroka (&head, avtor, nazvanie, god, gruppa);
            cin.clear();
            cin.sync();
            for (;;) {
                cout << endl;
                for (;;) {
                    cout << "Выберите действие и введите соответствующую цифру - ";
                    cin >> check_2;
                    if (check_2 == 1) { //Создание строки таблицы
                        kol_str = kol_str + 1;
                        vvod_el (head, avtor, nazvanie, god, gruppa, kol_str);
                        novaya_stroka (&head, avtor, nazvanie, god, gruppa);
                    }
                    else if (check_2 == 2) { //Редактирование таблицы
 
                    }
                    else if (check_2 == 3) { //Вывод таблицы
                        system("cls"); //Очищение консоли
                        table(head, kol_str);
                        choice();
                    }
                    else if (check_2 == 4) { //Сохранение
 
                    }
                    else if (check_2 == 5) { //Загрузка
                    
                    }
                    else if (check_2 == 6) { // Выход из программы
                        return 0;
                    }
                    else {
                        cout << endl << "ВНИМАНИЕ!" << endl << "Значение команды некорректно. Попробуйте ещё раз." << endl << endl;
                    }
                    cin.clear(); //Обнуление значения для повторного ввода
                    cin.sync();
                }
                cin.clear(); //Обнуление значения для повторного ввода
                cin.sync();
                cout << endl << "ВНИМАНИЕ!" << endl << "Количество строк введено некорректно. Проверьте и попробуйте ещё раз." << endl << endl;
            }       
        }
        cin.clear();
        cin.sync();
        cout << endl << "ВНИМАНИЕ!" << endl << "Таблица не создана, действие невозможно. Выберите соответствующее действие, что бы создать первые строки таблицы." << endl << endl;
        cout << "Выберите действие - ";
    }
    return 0;
}
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
21.05.2019, 11:45
Лучший ответ Сообщение было отмечено Apassiya как решение

Решение

Цитата Сообщение от Apassiya Посмотреть сообщение
void novaya_stroka(Katalog **head, const char avtor[128], const char nazvanie[128], int god, const char gruppa[128]) { //Создание строк таблицы
void novaya_stroka(Katalog **head, const char *avtor, const char *nazvanie, int god, const char *gruppa) { //Создание строк таблицы

Добавлено через 2 минуты
Цитата Сообщение от Apassiya Посмотреть сообщение
void vvod_el (Katalog *head, char avtor[128], char nazvanie[128], int god, char gruppa[128], int kol_str) { //Введение информации
void vvod_el (Katalog *head, char *avtor, char *nazvanie, int god, char *gruppa, int kol_str)

Добавлено через 1 минуту
Цитата Сообщение от Apassiya Посмотреть сообщение
cin >> avtor[128];
* * * * if (isalpha(avtor[128]) ) {
* * * * * * cout << "Введите название книги - ";
* * * * * * cin.clear();
* * * * * * cin.sync();
* * * * * * cin >> nazvanie[128];
cin >> avtor; isalpha(avtor[0]) и т.д.

Добавлено через 50 секунд
Цитата Сообщение от Apassiya Посмотреть сообщение
cin >> gruppa[128];
* * * * * * * * * * * * cout << endl;
* * * * * * * * * * * * if ((gruppa[128] == 'X') || (gruppa[128] == 'Y') || (gruppa[128] == 'C')) {
cin >> gruppa; if ((gruppa[0] == 'X') || (gruppa[0] == 'Y') || (gruppa[0] == 'C')) {[/quote]

Добавлено через 44 секунды
Ты с массивами вообще знакома?
1
19 / 0 / 0
Регистрация: 01.03.2019
Сообщений: 52
21.05.2019, 11:56  [ТС]
К сожалению - методом тыка, очень поверхностно... В универе только забрасывают заданиями без какого либо объяснения. А информацию, написанную доступным языком, я не могу найти.
А за правки - просто огромное спасибо! Все заработало, кроме года, но это я уже сама, думаю, покопаюсь) Спасибо большое!
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
21.05.2019, 12:07
Цитата Сообщение от Apassiya Посмотреть сообщение
Все заработало, кроме года, но это я уже сама, думаю, покопаюсь)
Ссылку здесь добавь
void vvod_el (Katalog *head, char *avtor, char *nazvanie, int &god, char *gruppa, int kol_str)
0
19 / 0 / 0
Регистрация: 01.03.2019
Сообщений: 52
21.05.2019, 12:13  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Ссылку здесь добавь
void vvod_el (Katalog *head, char *avtor, char *nazvanie, int &god, char *gruppa, int kol_str)
Долго бы искала... Вы не могли бы объяснить, как именно работает этот знак &?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
21.05.2019, 12:26
Цитата Сообщение от Apassiya Посмотреть сообщение
Долго бы искала... Вы не могли бы объяснить, как именно работает этот знак &?
Когда ты передаёшь параметр в функцию как int god, это означает, что ты делаешь копию пременной (или константы). Соответственно никто снаружи функции не сможет увидеть её изменений.

Если же ты делаешь int &god, то ты передаёшь ссылку на пременную, которая объявлена снаружи (в твоём случае в функции main()), т.е. значение, которое ты ему присвоишь (cin >> god будет сохранено в этой внешней переменной, и ты сможешь передать его дальше, в novaya_stroka (&head, avtor, nazvanie, god, gruppa);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.05.2019, 12:26
Помогаю со студенческими работами здесь

Вывод информации в виде таблицы
Вот программка #include&lt;iostream.h&gt; #include&lt;conio.h&gt; #include&lt;stdio.h&gt; #include&lt;string.h&gt; const int n = 3; //Число элементов...

Вывод данных в виде таблицы
Здравствуйте, помогите сделать шапку для фио студентов фио | номер зачётки | наименование группы | Оценки | ...

Вывод данных в виде таблицы в C++
Существует ли возможность вывода (записи) данных в виде таблиц в C++?

Вывод данных в виде таблицы
Всем привет! Подскажите новичку, как можно вывести введенные данные в виде таблицы? на данный момент информация выводится для каждого...

Вывод результатов в виде таблицы
Решить задачу типа (с выводом результатов вычислений в цикле) На основе решения задачи 1 решить задачу 2 Решить задачу типа 3 ...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru