Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Assassin225
12 / 12 / 7
Регистрация: 24.10.2015
Сообщений: 206
1

Самыми разными способами защита от ввода любых символов отличных от чисел

23.11.2017, 23:36. Просмотров 363. Ответов 3

Хорошего всем настроения!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
 
int main() {
    int a = 0;
    cout << "Enter the number: ";
    cin >> a;
    cout << "You entered a number: " << a << endl;
    system("pause");
    return 0;
}
Задача: по этому простенькому коду нужно придумать самые разные способы защиты от ввода любых символов отличных от чисел (разумеется чтобы в числе были только цифры). Чем больше будет способов тем лучше. Минимум надо 3. Один (низкоуровневый) уже есть в планах. Как реализую, так сразу сюда отправлю в комментарии к этой теме.
Ответ давать в виде готового компилируемого кода. А не просто функцию указывать и прочее. Поехали!

Добавлено через 1 час 33 минуты
Цитата Сообщение от Assassin225 Посмотреть сообщение
Как реализую, так сразу сюда отправлю в комментарии к этой теме.
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
#include <iostream>
#include <string>
using std::cout;
using std::cin;
using std::endl;
using std::string;
 
int main() {
    string a = "";
    int i = 0;
    cout << "Enter the number: ";
    cin >> a;
    // Исключение любых символов в числе кроме цифр.
    do {
        switch (a[i]) {
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':
        case '0': break;
        default:
            cout << "\nEnter the number again: ";
            cin >> a;
            i = -1;
            break;
        }
        i++;
    } while (a[i] != '\0');
    
    // Перевод из строки в число.
    int number = 0;
    for (size_t i = 0; a[i] != '\0'; i++)
    {
        int digit = (int)a[i] - (int)'0';
        number = number * 10 + digit;
    }
    cout << "You entered a number: " << number << endl;
    system("pause");
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.11.2017, 23:36
Ответы с готовыми решениями:

Запрет ввода символов, отличных от цифр
Нужно заполнить двумерный массив только числами. Как это реализовать?

Запрет ввода любых символов в edit
у меня в программе в edit выводится ответ и какой код написать или что в функциях написать или...

Замена value в input после ввода 3 любых символов
Уважаемы коллеги, всем здравствуйте! Будучи не сильным в знаниях javaScript, не могу справиться...

Запрет ввода любых символов в textbox программно
Всем снова привет! И так, у меня есть форма, на которой расположен textbox и мне надо в обработчике...

Запрет ввода любых символов кроме цифр в консоли
Ребята подскажите пожалуйста можно ли как-то разрешать ввод в консоль только цифр. Я делаю проверку...

3
W-san
4 / 4 / 3
Регистрация: 13.09.2017
Сообщений: 23
Завершенные тесты: 1
24.11.2017, 00:19 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
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
 
int main() {
    int a = 0;
    bool flag=false; //для цикла 
    
while (flag==false){
    
    cout << "Enter the number: ";
    cin >> a;
   
if (a>=10|a<=-1|cin.fail()){
    cout<<"You value is wrong. Try again "<<endl; 
    cin.clear();
    cin.ignore();
   }
   else {
        flag = true;
   }
}
 
    cout << "You entered a number: " << a << endl;
    system("pause");
    return 0;
}
1
nd2
3045 / 2558 / 1115
Регистрация: 29.01.2016
Сообщений: 8,569
24.11.2017, 00:36 3
Цитата Сообщение от Assassin225 Посмотреть сообщение
разумеется чтобы в числе были только цифры
Знак числа? Десятичный разделитель? Или только целые числа?
1
Assassin225
12 / 12 / 7
Регистрация: 24.10.2015
Сообщений: 206
24.11.2017, 23:14  [ТС] 4
Цитата Сообщение от nd2 Посмотреть сообщение
Знак числа?
Как отрицательные так и положительные числа. Спасибо что подсказали про минус, т.к. в моей проверке что выше беруться только строго положительные числа (включая ноль). Поэтому буду думать как залатать данную брешь.
Цитата Сообщение от nd2 Посмотреть сообщение
Десятичный разделитель? Или только целые числа?
Пока бы только с целыми разобраться )) На данный момент работа идет, где нужен ввод только целых чисел. Не известно куда занесет. Возможно, потребуется и проверка десятичных значений... Тогда начнется новый виток приседаний.

Добавлено через 20 часов 12 минут
Цитата Сообщение от Assassin225 Посмотреть сообщение
Поэтому буду думать как залатать данную брешь.
Готово!
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
#include <iostream>
#include <string>
using std::cout;
using std::cin;
using std::endl;
using std::string;
 
int main() {
    string a = "";
    int k = 0;
    cout << "Enter the number: ";
    cin >> a;
    if (a[0]=='-' && a[1] != '\0') {
        k = 1;
    }
    do {
        switch (a[k]) {
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':
        case '0': break;
        default:
            cout << "\nEnter the number again: ";
            cin >> a;
            if (a[0] == '-' && a[1] != '\0') {
                k = 1;
            } 
            else {
                k = -1;
            } 
            break;
        }
        k++;
    } while (a[k] != '\0');
    
    // Перевод из строки в число.
    int number = 0;
    if (a[0] == '-') {
        for (size_t i = 0; a[i+1] != '\0'; i++) {
            int digit = (int)a[i+1] - (int)'0';
            number = number * 10 - digit;
        }
    } 
    else {
        for (size_t i = 0; a[i] != '\0'; i++) {
            int digit = (int)a[i] - (int)'0';
            number = number * 10 + digit;
        }
    }
    cout << "You entered a number: " << number << endl;
    system("pause");
    return 0;
}
Вангую, чтобы проверять десятичные значения придется не слабо вспотеть
Благо, мне пока не нужно работать с десятичными числами.

Добавлено через 2 часа 20 минут
Для двух целочисленных знаковых переменных:
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
#include <iostream>
#include <string>
using std::cout;
using std::cin;
using std::endl;
using std::string;
 
int main() {
    string a = "", b = "";
    int k = 0;
    bool mark = false;
 
    do
    {
        k = 0;
        mark = false;
        cout << "Enter the numbers: ";
        cin >> a >> b;
        if (a[0] == '-' && a[1] != '\0') {
            k = 1;
        }
        do {
            switch (a[k]) {
            case '1':
            case '2':
            case '3':
            case '4':
            case '5':
            case '6':
            case '7':
            case '8':
            case '9':
            case '0': break;
            default:
                mark = true;
                break;
            }
            k++;
            if (mark) {
                break;
            }
        } while (a[k] != '\0');
        // ------------------------------------------------
        k = 0;
        if (b[0] == '-' && b[1] != '\0') {
            k = 1;
        }
        do {
            switch (b[k]) {
            case '1':
            case '2':
            case '3':
            case '4':
            case '5':
            case '6':
            case '7':
            case '8':
            case '9':
            case '0': break;
            default:
                mark = true;
                break;
            }
            k++;
            if (mark) {
                break;
            }
        } while (b[k] != '\0');
        if (mark) {
            cout << "\nEnter the numbers again: ";
        }
    } while (mark);
 
    // Перевод из строки в число.
    int number1 = 0;
    if (a[0] == '-') {
        for (size_t i = 0; a[i + 1] != '\0'; i++) {
            int digit = (int)a[i + 1] - (int)'0';
            number1 = number1 * 10 - digit;
        }
    }
    else {
        for (size_t i = 0; a[i] != '\0'; i++) {
            int digit = (int)a[i] - (int)'0';
            number1 = number1 * 10 + digit;
        }
    }
    // Перевод из строки в число.
    int number2 = 0;
    if (b[0] == '-') {
        for (size_t i = 0; b[i + 1] != '\0'; i++) {
            int digit = (int)b[i + 1] - (int)'0';
            number2 = number2 * 10 - digit;
        }
    }
    else {
        for (size_t i = 0; b[i] != '\0'; i++) {
            int digit = (int)b[i] - (int)'0';
            number2 = number2 * 10 + digit;
        }
    }
    cout << "You entered a numbers: " << number1 << " " << number2 << endl;
    system("pause");
    return 0;
}
Буду рад, если вам пригодиться
0
24.11.2017, 23:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2017, 23:14

Защита от ввода символов
есть код в котором я ввожу цифры нужно сделать что бы через консоль я не могу вводить больше ничего...

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

Реализация запрета ввода любых символов кроме цифр в консольном приложении
Здравствуйте, помогите пожалуйста реализовать запрет ввода любых символов кроме цифр в консольном...


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

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

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