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

Программа пропускает cin

21.06.2021, 09:26. Показов 1692. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
При вводе всех данных в 1( ввод массива структур) программа пропускает cin и повторяет меню выбора

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
208
209
210
211
212
213
214
215
216
#include <stdio.h>
#include <iostream>
#include <tchar.h>
#include "iostream"
#include "string"
 
using namespace std;
 
struct date
{
    int day, month, year;
};
 
struct reader
{
    char name[30];
    char fam[30];
    char ot[20];
    int number;
    char book;
    struct date term;
};
 
 
 
struct reader readers[30];
struct reader tm;
int sch = 0;
int er;
void enter_new();
int menu();
void find();
void del();
void change();
void out();
void sort();
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    while (1)
    {
        switch (menu())
        {
            case 1:enter_new(); break;
            case 2:sort(); break;
            case 3:find(); break;
            case 4:change(); break;
            case 5:del(); break;
            case 6:out(); break;
            case 7:return 0;
            default: cout << "Неверный выбор\n";
        }
    }
}
 
void enter_new()
{
    if (sch < 30)
    {
        cout << "Запись номер" << sch + 1;
 
        cout << "\nВведите имя: ";
        cin >> readers[sch].name;
 
        cout << "\nВведите фамилию: ";
        cin >> readers[sch].fam;
 
        cout << "\nВведите отчество: ";
        cin >> readers[sch].ot;
 
        cout << "\nВведите номер читательского билета: ";
        cin >> readers[sch].number;
 
        cout << "\nВведите название книги: ";
        cin >> readers[sch].book;
 
        cout << "\nВведите дату сдачи (день, месяц, год): ";
        cin >> readers[sch].term.day >> readers[sch].term.month >> readers[sch].term.year;
 
        sch++;
    }
    else cout << "ВВедено макс. количество записей";
}
 
int menu()
{
        int er;
        cout << "Введите: \n";
        cout << "1 - для ввода массива структур\n";
        cout << "2 - для сортировка массива структур\n";
        cout << "3 - для поиск в массиве структур по заданному параметру\n";
        cout << "4 - для изменение заданной структуры\n";
        cout << "5 - для удаление структуры из массива\n";
        cout << "6 - для вывод на экран массива структур\n";
        cout << "7 - для выход\n";
        cin >> er;
 
        return er;
};
 
void find() 
{
 
}
 
void del()
{
    int d;
    cout << "\nВведите номер записи, которую необходимо удалить\n";
    cout << "Если хотите удалить все записи, введите '99'\n";
    cin >> d;
    if (d != 99)
    {
        for (int i = (d - 1); i < sch; i++)
            readers[i] = readers[i + 1];
        sch = sch - 1;
    }
 
    if (d == 99)
    {
        for (int i = 0; i < 30; i++)
            readers[i] = tm;
        sch = 0;
    }
}
 
void change()
{
    int c;
    int per;
    cout << "\nВведите номер записи\n";
    cin >> c;
    do
    {
        cout << "Введите: \n";
        cout << "1 - для изменения имени\n";
        cout << "2 - для изменения фамилии\n";
        cout << "3 - для изменения отчества\n";
        cout << "4 - для изменение номера билета\n";
        cout << "5 - для изменения названия книги\n";
        cout << "6 - для изменения срока сдачи\n";
        cout << "7 - для прекращения\n";
        cin >> per;
        switch (per)
        {
            case 1: cout << "Введите новое имя\n";
                cin >> readers[c - 1].name;
                break;
            case 2: cout << "Введите новую фамилию\n";
                cin >> readers[c - 1].fam;
                break;
            case 3:cout << "Введите новое отчество\n";
                cin >> readers[c - 1].ot;
                break;
            case 4:cout << "Введите новый билет\n";
                cin >> readers[c - 1].number;
                break;
            case 5:cout << "Введите новое название книги\n";
                cin >> readers[c - 1].book;
                break;
            case 6:cout << "Введите новую дату сдачи\n";
                cin >> readers[c - 1].term.day >> readers[c - 1].term.month >> readers[c - 1].term.year;
                break;
            case 7: return;
        }
    } while (1);
}
 
void out()
{
    int sw;
    int k;
 
    if (sch == 0) 
        cout << "\nНет записей\n";
    else
    {
        cout << "\nВведите: \n";
        cout << "1 - если хотите вывести какую-либо запись\n";
        cout << "2 - если хотите вывести все записи\n";
        cin >> sw;
        if (sw == 1)
        {
            cout << "Введите номер записиБ которую нужно вывести\n";
            cin >> k;
            cout << endl;
            cout << "Имя: " << readers[k - 1].name << endl;
            cout << "Фамилия: " << readers[k - 1].fam << endl;
            cout << "Отчество: " << readers[k - 1].ot << endl;
            cout << "Номер читательского билета: " << readers[k - 1].number << endl;
            cout << "Книга: " << readers[k - 1].book << endl;
            cout << "Дата сдачи: " << readers[k - 1].term.day << "." << readers[k - 1].term.month << "." << readers[k - 1].term.year << endl;
        }
        if (sw == 2)
        {
            for (int i = 0; i < sch; i++)
            {
                cout << endl;
                cout << "Имя: " << readers[i].name << endl;
                cout << "Фамилия: " << readers[i].fam << endl;
                cout << "Отчество: " << readers[i].ot << endl;
                cout << "Номер читательского билета: " << readers[i].number << endl;
                cout << "Книга: " << readers[i].book << endl;
                cout << "Дата сдачи: " << readers[i].term.day << "." << readers[i].term.month << "." << readers[i].term.year << endl;
            }
 
        }
    }
}
 
void sort()
{
 
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.06.2021, 09:26
Ответы с готовыми решениями:

Программа пропускает cin
Уже несколько раз сталкивался с проблемами функции &quot;cin&quot; по задумке, в моей программе, он должен ожидать ввода цифры, а после выполнять...

Программа пропускает cin >>
Программа состоит из 2 частей. В 1 ввод имени и числа, например &quot;anna 6&quot;, выйти из цикла можно через Ctrl+Z. Во 2 части она должна искать...

При вводе данных программа пропускает операции cin
Описать структуру с именем note, содержащую следующие поля:  фамилия, имя;  номер телефона;  дата рождения (массив из трех...

17
run
 Аватар для I can
4914 / 4528 / 837
Регистрация: 13.04.2015
Сообщений: 9,657
21.06.2021, 09:36
Цитата Сообщение от kotlink Посмотреть сообщение
повторяет меню выбора
Так вы из цикла не выхОдите.
0
0 / 0 / 0
Регистрация: 21.06.2021
Сообщений: 31
21.06.2021, 09:48  [ТС]
Цитата Сообщение от I can Посмотреть сообщение
Так вы из цикла не выхОдите.
Она должна после ввода данных выходить в меню для следующего действия

Добавлено через 10 минут
Он повторяет меню до бесконечности без возможности ввода
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
21.06.2021, 10:12
Цитата Сообщение от kotlink Посмотреть сообщение
#include <iostream>
#include <tchar.h>
#include "iostream"
#include "string"
Что это? Что такое #include "iostream"? Как оно соотносится с #include <iostream>?

Что такое #include "string"?
0
0 / 0 / 0
Регистрация: 21.06.2021
Сообщений: 31
21.06.2021, 10:17  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Что это? Что такое #include "iostream"? Как оно соотносится с #include <iostream>?
У меня работает и так и так

Добавлено через 1 минуту
наверное понаписал от безысходности
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
21.06.2021, 11:56
kotlink, ввод данных должен быть в цикле. вместо
Цитата Сообщение от kotlink Посмотреть сообщение
if (sch < 30)
{
... // запись данных
sch++;
}
else cout << "ВВедено макс. количество записей";
напишите:
C++
1
2
3
4
for (int sch = 0; sch < 30; sch++)
{
    ... // запись данных        
}
   
1
0 / 0 / 0
Регистрация: 21.06.2021
Сообщений: 31
21.06.2021, 12:01  [ТС]
Цитата Сообщение от Yetty Посмотреть сообщение
1
2
3
4
for (int sch = 0; sch < 30; sch++)
    {
        ... // запись данных        
    }
там же может быть не 30, а напимер 17, но даже так эта проблема осталась
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
21.06.2021, 12:02
в чём заключается проблема, опишите подробнее
0
Just Do It!
 Аватар для XLAT
4188 / 2642 / 654
Регистрация: 23.09.2014
Сообщений: 8,833
Записей в блоге: 3
21.06.2021, 12:14
Цитата Сообщение от kotlink Посмотреть сообщение
программа пропускает cin и повторяет меню выбора
так как следующий вопрос будет про защиту от дурака,
то я вот тут вам сразу поправил и плюс на будущее:

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
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
#include <stdio.h>
#include <iostream>
#include <tchar.h>
#include "iostream"
#include "string"
 
///----------------------------------------------------------------------------1
/// Ручной ввод переменной.
///----------------------------------------------------------------------------:
template<class T>
T input_user(const char* promt = "")
{   T a;
    std::cout << promt;
    std::cin  >> a;
 
    while (std::cin.fail () || std::cin.get() != '\n')
    {   std::cin.clear();
        std::cin.sync ();
        std::cout << "Error!\n\n" << promt;
        std::cin  >> a;
    }
    return a;
}
 
using namespace std;
 
struct date
{   int day, month, year;
};
 
struct reader
{   char name[30];
    char fam[30];
    char ot[20];
    int number;
    char book;
    struct date term;
};
 
struct reader readers[30];
struct reader tm;
int sch = 0;
int er;
void enter_new();
int menu();
void find();
void del();
void change();
void out();
void sort();
 
 
int main()
{   setlocale(LC_ALL, "Russian");
    while (1)
    {   switch (menu())
        {   case 1:
                enter_new();
                break;
            case 2:
                sort();
                break;
            case 3:
                find();
                break;
            case 4:
                change();
                break;
            case 5:
                del();
                break;
            case 6:
                out();
                break;
            case 7:
                return 0;
            default:
                cout << "Неверный выбор\n";
        }
    }
}
 
void enter_new()
{   if (sch < 30)
    {   cout << "Запись номер" << sch + 1;
 
        cout << "\nВведите имя: ";
        cin >> readers[sch].name;
 
        cout << "\nВведите фамилию: ";
        cin >> readers[sch].fam;
 
        cout << "\nВведите отчество: ";
        cin >> readers[sch].ot;
 
        readers[sch].number =
            input_user<int>("\nВведите номер читательского билета: ");
 
        cout << "\nВведите название книги: ";
        cin >> readers[sch].book;
 
        cout << "\nВведите дату сдачи (день, месяц, год): ";
        readers[sch].term.day   = input_user<int>();
        readers[sch].term.month = input_user<int>();
        readers[sch].term.year  = input_user<int>();
 
        sch++;
    }
    else cout << "ВВедено макс. количество записей";
}
 
int menu()
{   int er;
    cout << "Введите: \n";
    cout << "1 - для ввода массива структур\n";
    cout << "2 - для сортировка массива структур\n";
    cout << "3 - для поиск в массиве структур по заданному параметру\n";
    cout << "4 - для изменение заданной структуры\n";
    cout << "5 - для удаление структуры из массива\n";
    cout << "6 - для вывод на экран массива структур\n";
    cout << "7 - для выход\n";
    cin >> er;
 
    return er;
};
 
void find()
{
 
}
 
void del()
{   cout << "\nВведите номер записи, которую необходимо удалить\n";
    cout << "Если хотите удалить все записи, введите '99'\n";
    int d  = input_user<int>();
    if (d != 99)
    {   for (int i = (d - 1); i < sch; i++)
            readers[i] = readers[i + 1];
        sch = sch - 1;
    }
 
    if (d == 99)
    {   for (int i = 0; i < 30; i++)
            readers[i] = tm;
        sch = 0;
    }
}
 
void change()
{
    cout << "\nВведите номер записи\n";
    int c = input_user<int>();
    do
    {   cout << "Введите: \n";
        cout << "1 - для изменения имени\n";
        cout << "2 - для изменения фамилии\n";
        cout << "3 - для изменения отчества\n";
        cout << "4 - для изменение номера билета\n";
        cout << "5 - для изменения названия книги\n";
        cout << "6 - для изменения срока сдачи\n";
        cout << "7 - для прекращения\n";
        int per = input_user<int>();
        switch (per)
        {   case 1:
                cout << "Введите новое имя\n";
                cin >> readers[c - 1].name;
                break;
            case 2:
                cout << "Введите новую фамилию\n";
                cin >> readers[c - 1].fam;
                break;
            case 3:
                cout << "Введите новое отчество\n";
                cin >> readers[c - 1].ot;
                break;
            case 4:
                readers[c - 1].number =
                    input_user<int>("Введите новый билет\n");
                break;
            case 5:
                readers[c - 1].book =
                    input_user<int>("Введите новое название книги\n");
                break;
            case 6:
                cout << "Введите новую дату сдачи\n";
                readers[sch].term.day   = input_user<int>();
                readers[sch].term.month = input_user<int>();
                readers[sch].term.year  = input_user<int>();
                break;
            case 7:
                return;
        }
    }
    while (1);
}
 
void out()
{   int k;
 
    if (sch == 0)
        cout << "\nНет записей\n";
    else
    {   cout << "\nВведите: \n";
        cout << "1 - если хотите вывести какую-либо запись\n";
        cout << "2 - если хотите вывести все записи\n";
        int sw  = input_user<int>();
 
        if (sw == 1)
        {   cout << "Введите номер записиБ которую нужно вывести\n";
            k = input_user<int>();
            cout << endl;
            cout << "Имя: " << readers[k - 1].name << endl;
            cout << "Фамилия: " << readers[k - 1].fam << endl;
            cout << "Отчество: " << readers[k - 1].ot << endl;
            cout << "Номер читательского билета: " << readers[k - 1].number << endl;
            cout << "Книга: " << readers[k - 1].book << endl;
            cout << "Дата сдачи: " << readers[k - 1].term.day << "." << readers[k - 1].term.month << "." << readers[k - 1].term.year << endl;
        }
        if (sw == 2)
        {   for (int i = 0; i < sch; i++)
            {   cout << endl;
                cout << "Имя: " << readers[i].name << endl;
                cout << "Фамилия: " << readers[i].fam << endl;
                cout << "Отчество: " << readers[i].ot << endl;
                cout << "Номер читательского билета: " << readers[i].number << endl;
                cout << "Книга: " << readers[i].book << endl;
                cout << "Дата сдачи: " << readers[i].term.day << "." << readers[i].term.month << "." << readers[i].term.year << endl;
            }
        }
    }
}
 
void sort()
{
 
}
1
0 / 0 / 0
Регистрация: 21.06.2021
Сообщений: 31
21.06.2021, 12:35  [ТС]
Цитата Сообщение от Yetty Посмотреть сообщение
в чём заключается проблема, опишите подробнее
проблема такая: я ввожу 1 (enter_new()) и перехожу в процедуру создания нового массива структур, ввожу там имя, фамилия, отчество, номер билета, название книги иииииии он пропускает ввод даты начинает повторять меню выбора действия и неверный выбор.

Добавлено через 2 минуты
Цитата Сообщение от XLAT Посмотреть сообщение
так как следующий вопрос будет про защиту от дурака,
то я вот тут вам сразу поправил на будущее:
может у меня что-то не так с ноутом, но даже так не работает, теперь просто строки Error
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
21.06.2021, 12:39
kotlink, очевидно, не выполняется условие std::cin.get() != '\n'
в потоке cin как раз и лежит перевод строки после последнего нажатия Enter

C++
1
2
3
        cout << "\nВведите название книги: ";//вводим АЗБУКА+ENTER
        cin >> readers[sch].book;//readers[sch].book равен АЗБУКА 
//при следующем вводе cin.get возьмёт ENTER
1
Just Do It!
 Аватар для XLAT
4188 / 2642 / 654
Регистрация: 23.09.2014
Сообщений: 8,833
Записей в блоге: 3
21.06.2021, 12:44
kotlink,
тут:
Цитата Сообщение от XLAT Посмотреть сообщение
C++
36
char book;
исправьте на
C++
36
char book[50];
Добавлено через 2 минуты
Цитата Сообщение от kotlink Посмотреть сообщение
может у меня что-то не так с ноутом, но даже так не работает, теперь просто строки Error
там ещё не всё защищено:
C++
122
    cin >> er;
надо добавить защиту ...

может и ещё где-то ...
0
0 / 0 / 0
Регистрация: 21.06.2021
Сообщений: 31
21.06.2021, 12:45  [ТС]
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
kotlink, очевидно, не выполняется условие std::cin.get() != '\n'
в потоке cin как раз и лежит перевод строки после последнего нажатия Enter
и как это исправить?
0
Just Do It!
 Аватар для XLAT
4188 / 2642 / 654
Регистрация: 23.09.2014
Сообщений: 8,833
Записей в блоге: 3
21.06.2021, 12:52
kotlink,
вот тестоните:
Кликните здесь для просмотра всего текста
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
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
#include <stdio.h>
#include <iostream>
#include <tchar.h>
#include "iostream"
#include "string"
 
///----------------------------------------------------------------------------1
/// Ручной ввод переменной.
///----------------------------------------------------------------------------:
template<class T>
T input_user(const char* promt = "")
{   T a;
    std::cout << promt;
    std::cin  >> a;
 
    while (std::cin.fail () || std::cin.get() != '\n')
    {   std::cin.clear();
        std::cin.sync ();
        std::cout << "Error!\n\n" << promt;
        std::cin  >> a;
    }
    return a;
}
 
using namespace std;
 
struct date
{   int day, month, year;
};
 
struct reader
{   char name[30];
    char fam[30];
    char ot[20];
    int number;
    char book[50];
    struct date term;
};
 
struct reader readers[30];
struct reader tm;
int sch = 0;
int er;
void enter_new();
int menu();
void find();
void del();
void change();
void out();
void sort();
 
 
int main()
{   setlocale(LC_ALL, "Russian");
    while (1)
    {   switch (menu())
        {   case 1:
                enter_new();
                break;
            case 2:
                sort();
                break;
            case 3:
                find();
                break;
            case 4:
                change();
                break;
            case 5:
                del();
                break;
            case 6:
                out();
                break;
            case 7:
                return 0;
            default:
                cout << "Неверный выбор\n";
        }
    }
}
 
void enter_new()
{   if (sch < 30)
    {   cout << "Запись номер" << sch + 1;
 
        cout << "\nВведите имя: ";
        cin >> readers[sch].name;
 
        cout << "\nВведите фамилию: ";
        cin >> readers[sch].fam;
 
        cout << "\nВведите отчество: ";
        cin >> readers[sch].ot;
 
        readers[sch].number =
            input_user<int>("\nВведите номер читательского билета: ");
 
        cout << "\nВведите название книги: ";
        cin >> readers[sch].book;
 
        cout << "\nВведите дату сдачи (день, месяц, год): ";
        readers[sch].term.day   = input_user<int>();
        readers[sch].term.month = input_user<int>();
        readers[sch].term.year  = input_user<int>();
 
        sch++;
    }
    else cout << "ВВедено макс. количество записей";
}
 
int menu()
{   cout << "Введите: \n";
    cout << "1 - для ввода массива структур\n";
    cout << "2 - для сортировка массива структур\n";
    cout << "3 - для поиск в массиве структур по заданному параметру\n";
    cout << "4 - для изменение заданной структуры\n";
    cout << "5 - для удаление структуры из массива\n";
    cout << "6 - для вывод на экран массива структур\n";
    cout << "7 - для выход\n";
 
    return input_user<int>();
};
 
void find()
{
 
}
 
void del()
{   cout << "\nВведите номер записи, которую необходимо удалить\n";
    cout << "Если хотите удалить все записи, введите '99'\n";
    int d  = input_user<int>();
    if (d != 99)
    {   for (int i = (d - 1); i < sch; i++)
            readers[i] = readers[i + 1];
        sch = sch - 1;
    }
 
    if (d == 99)
    {   for (int i = 0; i < 30; i++)
            readers[i] = tm;
        sch = 0;
    }
}
 
void change()
{
    cout << "\nВведите номер записи\n";
    int c = input_user<int>();
    do
    {   cout << "Введите: \n";
        cout << "1 - для изменения имени\n";
        cout << "2 - для изменения фамилии\n";
        cout << "3 - для изменения отчества\n";
        cout << "4 - для изменение номера билета\n";
        cout << "5 - для изменения названия книги\n";
        cout << "6 - для изменения срока сдачи\n";
        cout << "7 - для прекращения\n";
        int per = input_user<int>();
        switch (per)
        {   case 1:
                cout << "Введите новое имя\n";
                cin >> readers[c - 1].name;
                break;
            case 2:
                cout << "Введите новую фамилию\n";
                cin >> readers[c - 1].fam;
                break;
            case 3:
                cout << "Введите новое отчество\n";
                cin >> readers[c - 1].ot;
                break;
            case 4:
                readers[c - 1].number =
                    input_user<int>("Введите новый билет\n");
                break;
            case 5:
                cout << "Введите новое название книги\n";
                cin >> readers[c - 1].book;
                break;
            case 6:
                cout << "Введите новую дату сдачи\n";
                readers[sch].term.day   = input_user<int>();
                readers[sch].term.month = input_user<int>();
                readers[sch].term.year  = input_user<int>();
                break;
            case 7:
                return;
        }
    }
    while (1);
}
 
void out()
{   int k;
 
    if (sch == 0)
        cout << "\nНет записей\n";
    else
    {   cout << "\nВведите: \n";
        cout << "1 - если хотите вывести какую-либо запись\n";
        cout << "2 - если хотите вывести все записи\n";
        int sw  = input_user<int>();
 
        if (sw == 1)
        {   cout << "Введите номер записиБ которую нужно вывести\n";
            k = input_user<int>();
            cout << endl;
            cout << "Имя: " << readers[k - 1].name << endl;
            cout << "Фамилия: " << readers[k - 1].fam << endl;
            cout << "Отчество: " << readers[k - 1].ot << endl;
            cout << "Номер читательского билета: " << readers[k - 1].number << endl;
            cout << "Книга: " << readers[k - 1].book << endl;
            cout << "Дата сдачи: " << readers[k - 1].term.day << "." << readers[k - 1].term.month << "." << readers[k - 1].term.year << endl;
        }
        if (sw == 2)
        {   for (int i = 0; i < sch; i++)
            {   cout << endl;
                cout << "Имя: " << readers[i].name << endl;
                cout << "Фамилия: " << readers[i].fam << endl;
                cout << "Отчество: " << readers[i].ot << endl;
                cout << "Номер читательского билета: " << readers[i].number << endl;
                cout << "Книга: " << readers[i].book << endl;
                cout << "Дата сдачи: " << readers[i].term.day << "." << readers[i].term.month << "." << readers[i].term.year << endl;
            }
        }
    }
}
 
void sort()
{
 
}
0
Just Do It!
 Аватар для XLAT
4188 / 2642 / 654
Регистрация: 23.09.2014
Сообщений: 8,833
Записей в блоге: 3
21.06.2021, 12:56
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
//вводим АЗБУКА+ENTER
у мя прокатывет гуд:
0
Just Do It!
 Аватар для XLAT
4188 / 2642 / 654
Регистрация: 23.09.2014
Сообщений: 8,833
Записей в блоге: 3
21.06.2021, 13:03
kotlink, имейте ввиду что ввод нужно делать без пробелов!!!

что бы это исправить нужно заменить остальные cin >> ... на std:cin.getline(arrive, sizeof(arrive))
0
0 / 0 / 0
Регистрация: 21.06.2021
Сообщений: 31
21.06.2021, 13:10  [ТС]
Ну да, у вас все работает как часы
0
Just Do It!
 Аватар для XLAT
4188 / 2642 / 654
Регистрация: 23.09.2014
Сообщений: 8,833
Записей в блоге: 3
21.06.2021, 13:21
Лучший ответ Сообщение было отмечено kotlink как решение

Решение

Цитата Сообщение от kotlink Посмотреть сообщение
у вас
не у меня, а у вас!

вот теперь с пробелами:
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
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
#include <stdio.h>
#include <iostream>
#include <tchar.h>
#include "iostream"
#include "string"
 
///----------------------------------------------------------------------------1
/// Ручной ввод переменной.
///----------------------------------------------------------------------------:
template<class T>
T input_user(const char* promt = "")
{   T a;
    std::cout << promt;
    std::cin  >> a;
 
    while (std::cin.fail () || std::cin.get() != '\n')
    {   std::cin.clear();
        std::cin.sync ();
        std::cout << "Error!\n\n" << promt;
        std::cin  >> a;
    }
    return a;
}
 
using namespace std;
 
struct date
{   int day, month, year;
};
 
struct reader
{   char name[30];
    char fam[30];
    char ot[20];
    int number;
    char book[50];
    struct date term;
};
 
struct reader readers[30];
struct reader tm;
int sch = 0;
int er;
void enter_new();
int menu();
void find();
void del();
void change();
void out();
void sort();
 
 
int main()
{   setlocale(LC_ALL, "Russian");
    while (1)
    {   switch (menu())
        {   case 1:
                enter_new();
                break;
            case 2:
                sort();
                break;
            case 3:
                find();
                break;
            case 4:
                change();
                break;
            case 5:
                del();
                break;
            case 6:
                out();
                break;
            case 7:
                return 0;
            default:
                cout << "Неверный выбор\n";
        }
    }
}
 
void enter_new()
{   if (sch < 30)
    {   cout << "Запись номер" << sch + 1;
 
        cout << "\nВведите имя: ";
        cin.getline(readers[sch].name, sizeof(readers[sch].name));
 
        cout << "\nВведите фамилию: ";
        cin.getline(readers[sch].fam, sizeof(readers[sch].fam));
 
        cout << "\nВведите отчество: ";
        cin.getline(readers[sch].ot, sizeof(readers[sch].ot));
 
        readers[sch].number =
            input_user<int>("\nВведите номер читательского билета: ");
 
        cout << "\nВведите название книги: ";
        cin.getline(readers[sch].book, sizeof(readers[sch].book));
 
        cout << "\nВведите дату сдачи (день, месяц, год): ";
        readers[sch].term.day   = input_user<int>();
        readers[sch].term.month = input_user<int>();
        readers[sch].term.year  = input_user<int>();
 
        sch++;
    }
    else cout << "ВВедено макс. количество записей";
}
 
int menu()
{   cout << "Введите: \n";
    cout << "1 - для ввода массива структур\n";
    cout << "2 - для сортировка массива структур\n";
    cout << "3 - для поиск в массиве структур по заданному параметру\n";
    cout << "4 - для изменение заданной структуры\n";
    cout << "5 - для удаление структуры из массива\n";
    cout << "6 - для вывод на экран массива структур\n";
    cout << "7 - для выход\n";
 
    return input_user<int>();
};
 
void find()
{
 
}
 
void del()
{   cout << "\nВведите номер записи, которую необходимо удалить\n";
    cout << "Если хотите удалить все записи, введите '99'\n";
    int d  = input_user<int>();
    if (d != 99)
    {   for (int i = (d - 1); i < sch; i++)
            readers[i] = readers[i + 1];
        sch = sch - 1;
    }
 
    if (d == 99)
    {   for (int i = 0; i < 30; i++)
            readers[i] = tm;
        sch = 0;
    }
}
 
void change()
{
    cout << "\nВведите номер записи\n";
    int c = input_user<int>();
    do
    {   cout << "Введите: \n";
        cout << "1 - для изменения имени\n";
        cout << "2 - для изменения фамилии\n";
        cout << "3 - для изменения отчества\n";
        cout << "4 - для изменение номера билета\n";
        cout << "5 - для изменения названия книги\n";
        cout << "6 - для изменения срока сдачи\n";
        cout << "7 - для прекращения\n";
        int per = input_user<int>();
        switch (per)
        {   case 1:
                cout << "Введите новое имя\n";
                cin.getline(readers[c - 1].name, sizeof(readers[c - 1].name));
                break;
            case 2:
                cout << "Введите новую фамилию\n";
                cin.getline(readers[c - 1].fam, sizeof(readers[c - 1].fam));
                break;
            case 3:
                cout << "Введите новое отчество\n";
                cin.getline(readers[c - 1].ot, sizeof(readers[c - 1].ot));
                break;
            case 4:
                readers[c - 1].number =
                    input_user<int>("Введите новый билет\n");
                break;
            case 5:
                cout << "Введите новое название книги\n";
                cin.getline(readers[sch].book, sizeof(readers[sch].book));
                break;
            case 6:
                cout << "Введите новую дату сдачи\n";
                readers[sch].term.day   = input_user<int>();
                readers[sch].term.month = input_user<int>();
                readers[sch].term.year  = input_user<int>();
                break;
            case 7:
                return;
        }
    }
    while (1);
}
 
void out()
{   int k;
 
    if (sch == 0)
        cout << "\nНет записей\n";
    else
    {   cout << "\nВведите: \n";
        cout << "1 - если хотите вывести какую-либо запись\n";
        cout << "2 - если хотите вывести все записи\n";
        int sw  = input_user<int>();
 
        if (sw == 1)
        {   cout << "Введите номер записиБ которую нужно вывести\n";
            k = input_user<int>();
            cout << endl;
            cout << "Имя: " << readers[k - 1].name << endl;
            cout << "Фамилия: " << readers[k - 1].fam << endl;
            cout << "Отчество: " << readers[k - 1].ot << endl;
            cout << "Номер читательского билета: " << readers[k - 1].number << endl;
            cout << "Книга: " << readers[k - 1].book << endl;
            cout << "Дата сдачи: " << readers[k - 1].term.day << "." << readers[k - 1].term.month << "." << readers[k - 1].term.year << endl;
        }
        if (sw == 2)
        {   for (int i = 0; i < sch; i++)
            {   cout << endl;
                cout << "Имя: " << readers[i].name << endl;
                cout << "Фамилия: " << readers[i].fam << endl;
                cout << "Отчество: " << readers[i].ot << endl;
                cout << "Номер читательского билета: " << readers[i].number << endl;
                cout << "Книга: " << readers[i].book << endl;
                cout << "Дата сдачи: " << readers[i].term.day << "." << readers[i].term.month << "." << readers[i].term.year << endl;
            }
        }
    }
}
 
void sort()
{
 
}
Добавлено через 2 минуты
kotlink,
кстати задача отлова ошибок ввода на этом не заканчивается,
например, ФИО не может содержать знаков отличающихся от букв и тп и тд..

но это вам уже щас не надо...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.06.2021, 13:21
Помогаю со студенческими работами здесь

Программа пропускает вызов cin.getline() во время выполнения
помогите исправить прогу, не работает cin.getline, просто пропускает ее(( void main() { setlocale(LC_ALL,&quot;russian&quot;); ...

Пропускает cin
#include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;stdio.h&gt; #include &lt;cstring&gt; #include &lt;fstream&gt; #include &lt;iostream&gt; #include...

Пропускает первый cin
что делать если пропускает первый cin? Без возможности ввести в первую строку, сразу же начинает вторую. string name_one; ...

Пропускает cin в цикле
в цикле на вывод массива строк пропускает cin и просто пролетает цикл без возможности вписать ответ Что делать? void Test1() { ...

Пропускает cin в цикле
в цикле на вывод массива строк пропускает cin и просто пролетает цикл без возможности вписать ответ Что делать? void Test1() { ...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru