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

Последствия некорректного ввода данных

05.11.2018, 22:29. Показов 272. Ответов 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
#include <iostream>
#include <clocale>
#include <conio.h>
#include <ctime>
using namespace std;
 
int checking_digit(int x)
{
    setlocale(LC_ALL, "Russian");
    if (!cin.good())
    {
        cout << "\t\a\nВведите снова: ";
        cin.clear();
        while (cin.get() != '\n');
        cin >> x;
        checking_digit(x);
    }
    return x;
}
 
char checking_char(char x)
{
    setlocale(LC_ALL, "Russian");
    if (!cin.good())
    {
        cout << "\t\a\nВведите снова: ";
        cin.clear();
        while (cin.get() != '\n');
        cin >> x;
        checking_char(x);
    }
 
    if (x < 'A' || x > 'Z')
    {
        cout << "\t\a\nВведите букву АНГЛИЙСКОГО алфавита: ";
        cin.clear();
        cin >> x;
        checking_char(x);
    }
    return x;
}
 
int main()
{
 
    for (;;) {
        setlocale(LC_ALL, "Russian");
        srand(time(NULL));
 
        int n;
        cout << "\n\tКоличество элементов: ";
        cin >> n;
        checking_digit(n);
 
        char *massive = new  char[n];
 
        int choose;
        bool catching = true;
 
        do
        {
            cout << "\a\n\tНажмите 1, чтобы заполнить массив вручную.\n\tНажмите 2, чтобы заполнить массив случайными буквами!";
            cin >> choose;
            switch (choose)
            {
            case 1:
                for (int i = 0; i < n; i++)
                {
                    cout << endl << i + 1 << " element: ";
                    cin >> massive[i];
                    checking_char(massive[i]);
                }
                catching = true;
                break;
            case 2:
                for (int i = 0; i < n; i++)
                {
                    //случайные числа в диапазоне от 65 до 90 (ASCII-коды больших латинских символов)   
                    massive[i] = 65 + rand() % (90 - 65 + 1);
                }
                catching = true;
                break;
            default:
                cout << "\n\t\aВыберите 1 или 2! \n";
                cin.clear();
                catching = false;
            }
        } while (catching == false);
 
        cout << "\n\tВаш массив: \n";
        for (int i = 0; i < n; i++) cout << (massive[i]) << " ";
        cout << "\n\n";
 
    
        for (int j = 0; j < n; j++)   // Поиск одинаковых элементов массива
        {
            for (int i = j + 1; i < n; i++) // Перебор по очереди 
            {
                if (massive[j] == massive[i])
                {
                    cout << j + 1 << "-й и " << i + 1 << "-й элементы являются одинаковыми. " << endl;
                    for (int del = i; del < n - 1; del++) // Удаление повторяющегося элемента
                    {
                        massive[del] = massive[del + 1]; 
                    }
                    n -= 1;
                    i--;
                }
            }
        }
        cout << "\n\n\tНовый массив: " << endl;;
        for (int m = 0; m < n; m++)
        {
            cout << massive[m] << " ";
        }
        cout << endl << endl;
        cout << "\n\n\tОтсортированный массив: " << endl;
 
 
        int *a = new int[n]; //Создаю дополнительный массив для сортировки
        for (int i = 0; i < n; i++)
        {
            a[i] = (int)massive[i]; // Присваиваю его элементом аски-коды букв - так проще
        }
 
        int p;
 
        for (int i = 0; i < n - 1; i++)
        {
            for (int j = 0; j < n - i - 1; j++) {
                if (a[j] > a[j + 1])
                {
                    p = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = p;
                }
            }
        }
 
        for (int i = 0; i < n; i++)
        {
            cout << (char)a[i] << " ";
        }
 
        delete[]massive;
        delete[]a;
 
        cout << "\n\tНажмите любую клавишу, чтобы продолжить! \n";
        _getch();
    } 
}
Если вкратце про сам код, то есть массив символов английских больших букв(которые вводятся либо вручную либо с помощью random, программа удаляет дубликаты и сортирует массив от А до Z, здесь стоит защита на некорректный ввод данных

Но проблема такая: если ввести сначала все верно(потом программа предложит еще раз попробовать) и потом ввести некорректно что-либо(например вместо числа букву), программа предложит ввести число еще раз, и если ввести его верно то значения просто не выведутся на экран, выведутся все cout'ы что есть в программе, но значения не выводятся
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.11.2018, 22:29
Ответы с готовыми решениями:

Защита от некорректного ввода
Будьте добры, помогите написать защиту от дурака на ввод массива элементы которого тип float...

Защита от некорректного ввода
Помогите, пожалуйста, с защитой от некорректного ввода! Программа выполняет задания с помощью...

Защита от некорректного ввода
Подскажите пожалуйста как доработать защиту от некорректного ввода: // ConsoleApplication4.cpp :...

Защита от некорректного ввода
Приветствую, помогите, пожалуйста, реализовать защиту от некорректного ввода. Должны быть...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.11.2018, 22:29

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Защита от некорректного ввода
Здравствуйте! Нужно осуществить контроль при заполнении матрицы, если введены не корректные...

Защита от некорректного ввода
Помогите сделать так, что при вводе букв программа продолжала работать: запрещала ввод букв(только...

Защита от некорректного ввода
Здравствуйте. 1 курс, полный нуб. Знаю только cin и cout, массивы. Пока все было нормально, но...

Защита от некорректного ввода double
Прошу помощи с защитой от некорректного ввода. Сам студент 1 курса - на лекциях ничего толком не...


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

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

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