Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 24.03.2018
Сообщений: 10
1

Проверка вводимых данных

01.06.2018, 15:16. Показов 641. Ответов 2
Метки нет (Все метки)

Как сделать так, чтобы при вводе символов в строку года поступления на экран появлялось соответствующее сообщение и происходил повторный ввод данных. Подскажите
Кликните здесь для просмотра всего текста
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 <clocale>
#include <iomanip>
#include <cstdio>
#include <conio.h>
#include <windows.h>
#include <time.h>
#define VALUES 20000
#ifndef NULL
#define NULL  0
#endif
using namespace std;
typedef const char*  cchar;
 
 
struct Workers // объявление структуры с данными
{
    char name[40];  // имя работника
    char surname[40];//фамлия
    char Oname[40];//отчество
    char position[20];//должность
    short year;//год поступления
    int ID;/*персональный индентификатор*/
    Workers *next;
};
 
 
 
 typedef enum enum_sort{
    sort_family = 0, sort_date = 1
 };
long  timestamp(struct Workers* obj) {
        return obj->year;}
 
// прототипы функций
int Menu();
void All_workers(Workers *first);
void add_first(Workers **first);
void add_center(Workers **first);
void add_last(Workers **first);
void  stag_workers(Workers *first);
void del_workers(Workers **first);
void clear_All(Workers **first);
void sort(Workers* ffp,Workers* first);
// прототипы функций
void  sort_list(struct Workers*  pfirst, enum enum_sort type)
{
 struct Workers*  first;
        struct Workers*  last;
        int    id, tmp;
        char   surname[12];
        char   name[9];
         char Oname[40];//отчество
        char position[20];//должность
        int ID;
while(1) {
               id = 0;
               first = pfirst;
               last  = pfirst->next;
               for( ; last != NULL ; last = last->next, first = first->next) {
 
                   if( (tolower(first->surname[0]) > tolower(last->surname[0]) && type == sort_family) ||
                        (timestamp(first) > timestamp(last) && type == sort_date)  ) {
 
                          strcpy(surname, first->surname);
                          strcpy(first->surname, last->surname);
                          strcpy(last->surname, surname);
 
                          strcpy(name, first->name);
                          strcpy(first->name, last->name);
                          strcpy(last->name, name);
 
                          strcpy(Oname, first->Oname);
                          strcpy(first->Oname, last->Oname);
                          strcpy(last->Oname, Oname);
 
                          strcpy(position, first->position);
                          strcpy(first->position, last->position);
                          strcpy(last->position, position);
 
                          tmp               = first->year;
                          first->year= last->year;
                          last->year = tmp;
 
                          tmp               = first->ID;
                          first->ID= last->ID;
                          last->ID = tmp;
 
 
 
 
 id |= 1;}}
if(! id)
                   break;
 
        };
 
}
int main()
{
setlocale(LC_CTYPE,"rus");
SetConsoleCP (1251);
SetConsoleOutputCP(1251);
Workers *first=NULL;
Workers *ffp=NULL;
//first->next=NULL;
    system ("cls");
    int k;
    while ((k = Menu()) != 0)
    {
        switch (k)
        {system("cls");
        case 1:
            system("cls"); All_workers(first); break;
        case 2:
            system("cls");  add_first(&first); break;
        case 3:
            system("cls");  add_center(&first); break;
        case 4:
            system("cls");  add_last(&first); break;
        case 5: del_workers(&first); break;
        case 6: stag_workers(first); break;
        case 7: clear_All(&first);break;
        case 8: sort(ffp,first);
 
        case 9: break;
        default: cout << "Введите число от 1 до 7!!!\n";system("pause");system("cls");
        }
    }
    getchar(); // пауза
    return 0;
}
int Menu()
{system("cls");
 
    cout<<"                  MENU\n";
    cout<<"1 - Просмотреть информацию о работнике\n";
    cout<<"2 - Добавить работника в начало списка\n";
    cout<<"3 - Добавить работника в середину списка\n";
    cout<<"4 - Добавить работника в конец списка\n";
    cout<<"5 - Удалить работника\n";
    cout<<"6 - Вывести работника(ов) чей стаж больше введенного значения\n";
    cout<<"7 - очистить весь список\n";
    cout<<"8 - сортировка\n";
    cout<<"0 - Выход\n";
    cout<<endl;
    cout<<"Введите нужный пункт: ";
    int k;
    cin>>k;
    system("cls");
    cout<<endl;
    return k;
}
void All_workers(Workers *first) /*Вывод всего списка работников*/
{//system("cls");
    cout << "                           Данные о работниках фирмы\n";
    cout << setiosflags( ios::left );
    cout.width(10);
    cout <<"ИМЯ"<<setw(14)<< "ФАМИЛИЯ"
    <<setw(16)<< "ОТЧЕСТВО"<<setw(14)<< "ДОЛЖНОСТЬ"
    <<setw(20)<<"ГОД ПОСТУПЛЕНИЯ"<<"ID РАБОТНИКА\n" ;
    Workers *pv = first;
    while (pv)
    {
    cout<< setw(10) <<pv->name<<setw(14)<< pv->surname
    <<setw(16)<< pv->Oname;
    cout<<setw(14)<< pv->position<<setw(20)<<pv->year<<pv->ID;
    cout << "\n";
    pv=pv->next;
    } cout<<endl; system("pause");
}
void  add_first(Workers **first) /*Добавление работника в список(в начало)*/
{
 
 
 
    Workers *pv=new Workers;
    {cout << "\nИнформация о работниках \n";
    cout<<"Введите Имя: > ";
    cin>>pv->name;
    cout << "Введите Фамилию: > ";
    cin >> pv->surname;
    cout << "Введите Отчество: > ";
    cin >> pv->Oname;
    cout << "Введите Должность: > ";
    cin >> pv->position;
    cout << "Введите Год поступления: > ";
    cin >> pv->year;
    if (!cin)
    {
        cout<<"Repeat!";
         cout << "Введите Год поступления: > ";
    cin >> pv->year;
    }
    cout << "Введите ID работника > ";
    cin >> pv->ID;
 
    cout << "\n";
    pv->next=NULL;}
    Workers *p = *first;
    if(p->name!=pv->name)
    {
        pv->next=p;
        *first=pv;
    }
    system("pause");system("cls");
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.06.2018, 15:16
Ответы с готовыми решениями:

Проверка вводимых данных
Доброго времени суток, форумчане. Я столкнулся с такой проблемой: при введении еденицы измерения,...

Проверка вводимых данных
Подскажите, пожалуйста, как зациклить ввод данных до тех пор пока пользователь не введёт корректный...

Проверка вводимых данных.
предполагается, что функция будет проверять, что ввел пользователь, и, если он ввел не натуральное...

Проверка вводимых данных
Вот часть программы int main(void) { int vop; setlocale(LC_ALL, &quot;Russian&quot;); int mas1,...

2
471 / 423 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
01.06.2018, 15:23 2
Если в cin вводятся данные, которые не подходят по типу, cin обретает флаг ошибки. Проверяй его - если есть, то очищаешь поток, выкидываешь сообщение о "введите корректные данные" и заново просишь ввод.
1
71 / 58 / 48
Регистрация: 12.03.2017
Сообщений: 566
01.06.2018, 16:50 3
Ну или самый банальный ваpиант(не подходит для больших пpоектов) , делаешь массив из символов котоpые запpещены , и в цикле пpовеpяешь каждый символ вводимый пользователем с каждым элементов из этого массива. Ваpиант оч сыpой, но pаньше я его использовал)
Бывало я делал массив из алфавитов)
Или используй pегуляpные стpоки.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.06.2018, 16:50

Проверка вводимых данных
#include &lt;iostream&gt; using namespace std; int main() { double a, b, c; cout &lt;&lt;...

Проверка корректности вводимых данных
Здравствуйте, подскажите,пожалуйста, как прописать условия проверки. Мне нужно: если вводится...

Проверка на корректность вводимых данных
В моём коде должны быть ТОЛЬКО вводимые числа от -1000 до 1000 (с плавающей точкой). Если...

Проверка типа вводимых данных.
Собственно,как осуществить ? К примеру,здесь: int main() { int x; int y; ...

Проверка на коректность вводимых данных
Есть такой код где данные вводятся целого типа( int x; cin &gt;&gt; x; ). Вопрос такой как проверить...

Посимвольная проверка вводимых данных
Доброго времени суток. Такая проблема: нужно запретить пользователю вводить не цифры и дробные...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.