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

Как сделать защиту считывания данных в int?

28.09.2017, 11:04. Показов 875. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите сделать защиту от введения букв и цифр больше или меньше 10
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 <cstdlib>
#include <iostream>
#include <windows.h>
#include <math.h>
#include <time.h>
 
using namespace std;
 
int check(int par)              //Проверка данных в int
{
    while (!(cin >> par) || (cin.peek() != '\n') || par<-10 || par>10)
    {
        cin.clear();
        while (cin.get() != '\n');
        cout << "Ошибка!\n";
    }
    return par;
}
 
float check(double par)         //Проверка double
{
    while (!(cin >> par) || (cin.peek() != '\n') || par<-10 || par>10)
    {
        cin.clear();
        while (cin.get() != '\n');
        cout << "Ошибка!\n";
    }
    return par;
}
 
// организация вывода по-русски
char bufRus[256];
char* Rus(const char* text)
{
CharToOem(text,bufRus);
return bufRus;
}
 
// вычисление отклонения для прямой y=ax+b
float devtn(float a, float b, float x, float y)
{
      return (y - a*x - b); 
}
 
int main(int argc, char *argv[])
{
    int A, B; // параметры первой прямой для воода с клавиатуры
    float a2, b2, b1; // коэффициенты двух прямых
    float x0, y0, x, y; // координаты двух точек
    
    // ввод коэффициентов первой прямой с клавиатуры
    cout << Rus("Введите коэффициенты первой прямой (целые числа):") << endl;
    cout << "a2 = "; cin >> A;
    cout << "b2 = "; cin >> B;
    a2 = A; 
    b2 = B;
    
    // определение коэффициента b1
    srand(time(NULL)); // инициализация датчика случайных чисел
    // rand()%20001 выдаёт случайное целое в диапазоне от 0 до 20 000
    // 0.001*(rand()%20001) переводит это число в диапазон 0..20
    // затем сдвигаем на 10 влево
    b1 = 0.001*(rand()%20001) - 10.0;
    
    // ввод вещественных координат первой точки
    cout << Rus("Введите координаты первой точки (вещественные числа от -10 до 10)") << endl; 
    do 
    {
        cout << "x0 = "; 
        cin >> x0;
    } while (fabs(x0) > 10.0);
    do 
    {
        cout << "y0 = "; 
        cin >> y0;
    } while (fabs(y0) > 10.0);
    
    // коордмнаты второй точки
    x = 0.001*(rand()%20001) - 10.0;
    y = 0.001*(rand()%20001) - 10.0;
    
    bool inarea1, inarea2; // признак попадания точки в область
    // определение попадания точки в облавть - произведение отклонений неположительно
    inarea1 = (devtn(0.0, b1, x0, y0)*devtn(a2, b2, x0, y0) <= 0.0);
    inarea2 = (devtn(0.0, b1, x, y)*devtn(a2, b2, x, y) <= 0.0); 
    
    // вывод результатов
    cout << Rus("Коэффициенты 1 прямой: ") << 0.0 << "  " << b1 << endl;
    cout << Rus("Коэффициенты 2 прямой: ") << A << "  " << B << endl;
 
    cout << Rus("Первая точка: ") << x0 << "  " << y0;
    if (inarea1) 
       cout << Rus(" принадлежит области") << endl;
    else 
       cout << Rus(" не принадлежит области") << endl;
 
    cout << Rus("Вторая точка: ") << x << "  " << y;
    if (inarea2) 
       cout << Rus(" принадлежит области") << endl;
    else 
       cout << Rus(" не принадлежит области") << endl;
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.09.2017, 11:04
Ответы с готовыми решениями:

Размерность int или как из signed int сделать unsigned int?
Добрый день. Есть старая база уже с некоторыми данными. При развёртывании её на одном из тестовых серверов столкнулся с неожиданной...

Как сделать защиту админки?
Как сделать так что-бы в админку мог заходить только я ?!

Как сделать защиту кода ?
как сделать защиту кода ?

2
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
28.09.2017, 12:26
Проверку на границы сами добавьте
С++17
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
#include <algorithm>
#include <cctype>
#include <iostream>
#include <regex>
#include <string>
 
template<typename T>
bool SafeInput(T &a_val)
{
    if constexpr (!std::is_arithmetic_v<T>)
        return (std::cin >> a_val).good();
    std::string tmp;
    if (!(std::cin >> tmp))
        return false;
    if constexpr (std::is_floating_point_v<T>)
    {
        if (!std::regex_match(tmp, std::regex("\\d*\\.\\d*")) || tmp == ".")
            return false;
        a_val = std::stold(tmp);
        return true;
    }
    if (!std::all_of(tmp.cbegin(), tmp.cend(), ::isdigit))
        return false;
    a_val = std::stoll(tmp);
    return true;
}
 
int main()
{
    double x;
    if (SafeInput(x))
        std::cout << x;
}
https://wandbox.org/permlink/faLa8ve0K51NF0W6
0
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
28.09.2017, 13:50
MrGluck, число с плавающей точкой еще так вводить можно 1e-5 например, там регулярное выражение сложней должно быть.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.09.2017, 13:50
Помогаю со студенческими работами здесь

Как сделать защиту от дураков
Здравствуйте, подскажите как сделать защиту от дураков? Есть DBGrid в нем есть поле номер. Номер повторятся не должен, если при добавлении...

Как сделать защиту от дурака?
Подскажите как сделать защиту от дурака в программе с расчетами ну там на ноль делить нельзя типо и т.д

Как сделать такую защиту от дурака?
Скрипт обрабатывает POST с формы и читает элемент в переменную, а на форме он ещё не сделан. Можно сделать, чтоб в этом случае просто...

Как сделать защиту от SQL-инъекций
Вопрос вот в чём: как тут сделать защиту от sql-инъекций? def create @student = Student.new(student_params) respond_to...

как сделать защиту от дурака в этом коде?
как сделать чтобы при вводе чисел больше 20 или букв писало о неправильно вводимых данных #include &quot;stdafx.h&quot; #include...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
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