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

Защита от дурака

19.02.2013, 06:28. Показов 11503. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот только начал изучать С++ помогите составить защиту от дурака пожалуйста, вот код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
 
int main ()  {
    setlocale(0, "rus");
    double A;
    double Z;
    double U;
 
cout<<"Введите значение числа A\n";
cin>>A;
 
cout<<"Введите значение числа Z\n";
cin>>Z;
 
cout<<"U=";
 
cout<<(A*Z*Z)+(((A/2)*(Z*Z))/13.61)-(A*Z)   <<"\n";
 
return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.02.2013, 06:28
Ответы с готовыми решениями:

Защита от дурака
Как в этот код добавить защиту от ввода символов? #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;Windows.h&gt; #include...

Защита от дурака
Нужно сделать так что бы в этом куске кода кроме цифр нельзя было нечего вводить(то есть что нельзя было ввести например точку, запятую,...

Защита от дурака C++
Нужно сделать защиту от дурака. Пользователь должен вводить только отрицательные дробные числа. Получилось вот что: bool n=true; ...

33
0 / 0 / 1
Регистрация: 19.02.2013
Сообщений: 130
19.02.2013, 08:20  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от UVEN Посмотреть сообщение
У меня программа работает, код читает без ошибки ).. Какие ошибки выдает у тебя ?..
Ты про какую программу?
0
3 / 3 / 2
Регистрация: 19.02.2013
Сообщений: 26
19.02.2013, 08:21
Твоя программа )...
0
0 / 0 / 1
Регистрация: 19.02.2013
Сообщений: 130
19.02.2013, 08:39  [ТС]
Цитата Сообщение от UVEN Посмотреть сообщение
Твоя программа )...
Ну моя то работает, а вот как в ней проверку данных сделать?
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
19.02.2013, 21:05
Скорее всего лазейки найдутся, но как вариант.
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
#include <iostream>
#include <string>
#include <ctype.h>
#include <sstream>
 
using namespace std;
 
double string_to_double( const std::string& s )
 {
   std::istringstream i(s);
   double x;
   if (!(i >> x))
     return 0;
   return x;
 } 
 
 
double Foo(string &s)
{ 
    string temp=""; 
    int count=0;    
    
        
    for (int i=0;i<s.size();i++) 
    {
        if ( (i>0)&&(s[i]=='.')&&(!count)) count=i-1;
        if ((s[i]>='0')&&(s[i]<='9')) temp.push_back(s[i]);     
    }   
 
    if (count) temp.insert(count,1,'.');
    if (s[0]=='-') temp.insert(0,1,'-');
    
 
    if (s.size()!=temp.size())  return 1;
    else return 0;
 
}
 
 
void input(double &x,char Name)
{
    string ch="";
   double correct=10;
    while (correct)
   {
    cout<<"Введи "<<Name<<"   ";
     cin>>ch;
     correct=Foo(ch);
     if (correct) cout<<"Некорректный ввод\n\n";
     else x=string_to_double(ch);
   }
}
    
 
int main(void)
{   
   
   double A=0,Z=0,U=0;
   
   input(A,'A'); //Предлагаешь ввести A
   input(Z,'Z'); //Предлагаешь ввести Z
   input(U,'U'); //Предлагаешь ввести U
   
  
 
   cout<<"\n";
   cout<<"A = "<<A<<"\n";
   cout<<"U = "<<U<<"\n";
   cout<<"Z = "<<Z<<"\n";
   cout<<"Сумма = "<<A+U+Z<<"\n\n"; //Подставляй своё выражение (здесь сумма)
   cout<<(A*Z*Z)+(((A/2)*(Z*Z))/13.61)-(A*Z)   <<"\n";//Вот твоё
   
 
system("PAUSE");
return 0;
}
0
0 / 0 / 0
Регистрация: 07.01.2013
Сообщений: 19
19.02.2013, 23:37
а состояние потока использовать не торт?
0
0 / 0 / 1
Регистрация: 19.02.2013
Сообщений: 130
20.02.2013, 08:27  [ТС]
Еще хотел спросить как поставить ограничение на количество вводимых символов?
0
96 / 96 / 21
Регистрация: 25.04.2012
Сообщений: 449
20.02.2013, 08:40
Цитата Сообщение от MishkaSh Посмотреть сообщение
Еще хотел спросить как поставить ограничение на количество вводимых символов?
cin.getline
там параметры
куда считать, сколько и символ конца какой использовать
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
20.02.2013, 10:22
MishkaSh, в моем коде можно так.
одна функция слегка изменена и сам ввод стал другим
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void input(double &x,char Name,int size)
{
    string ch="";
   double correct=10;
    while (correct)
   {
    cout<<"Введи "<<Name<<"   ";
     cin>>ch;  
     correct=Foo(ch);
     if (correct) cout<<"Некорректный ввод\n\n";
     else if (ch.size()>size) {correct=1; cout<<"Слишком много символов, повторите ввод\n\n";}
     else x=string_to_double(ch);
   }
}
При вводе большего числа символов чем нужно, об этом сообщается и требуется повторить ввод.
C++
1
2
3
   input(A,'A',3); //Предлагаешь ввести A (ограничение 3 символа)
   input(Z,'Z',4); //Предлагаешь ввести Z (ограничено 4 символа)
   input(U,'U',5); //Предлагаешь ввести U (ограничено 5 символов)
0
0 / 0 / 1
Регистрация: 19.02.2013
Сообщений: 130
20.02.2013, 12:27  [ТС]
Цитата Сообщение от Tiva Посмотреть сообщение
cin.getline
там параметры
куда считать, сколько и символ конца какой использовать
Как через cin.getline сделать?

Добавлено через 6 минут
Вот сам код:
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
#include <iostream>
using namespace std;
 
int main () 
{
setlocale(0, "rus");
double A;
double Z;
double U;
char name[10], title[10];
cout<< "Введите значение числа A\n";
while (!(cin>>A) || cin.get()!='\n')
{
cout<<"Ошибка, попробуйте еще раз\n";
cin.clear();
cin.sync();
cout<<"Введите значение числа A\n";
}
 
cout<<"Введите значение числа Z\n";
while (!(cin>>Z) || cin.get()!='\n')
{
cout<<"Ошибка, попробуйте еще раз\n";
cin.clear();
cin.sync();
cout<<"Введите значение числа Z\n";
}
 
cout<<"U=";
 
cout<<(A*Z*Z)+(((A/2)*(Z*Z))/13.61)-(A*Z) << "\n";
 
 
return 0;
}
Добавлено через 16 минут
И вот в этом коде через cin.getline нужно сделать ограничение на количество вводимых символов в double
0
0 / 0 / 0
Регистрация: 18.10.2017
Сообщений: 3
18.10.2017, 13:47
Цитата Сообщение от Tiva Посмотреть сообщение
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
#include <iostream>
#include <cctype>
#include <string>
using namespace std;
int main(void)
{
    setlocale(0,"");
    int A;
    int count=0;
    do
    {
        count=0;
        string temp;
        cout<<"введите значение:\n";
        cin>>temp;
        
        for(int i=0; i<temp.size(); i++)
            if(isdigit(temp[i])==0) count++;
        if(count==0) break;
        else cout<<"некорректное значение\n";
    }
    while(count>0);
 
cout<<"вы ввели правильно!\n\n";
}
А не подскажете как сделать точно такую же проверку, только на языке C (используя scanf, printf и т.д. (стандартные функции)). Ибо нужно знать количество символов в строке, а я могу ввести как 2 символа, так и 5, так и 145 и т.д. Заранее спасибо
0
0 / 0 / 1
Регистрация: 18.10.2017
Сообщений: 8
18.10.2017, 20:12
Вот тебе максимальный уровень защиты от дурока. Тут даже нажатия на некорректные символы игнорируются.
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
#include <string>
#include <conio.h>
#include <stdlib.h>
#include <iostream>
 
#define MINUS 45
#define ESC 27
#define ENTER 13
#define BACKSPACE 8
#define DOT 46
#define COMMA 44 //запятая
 
using namespace std;
 
double imputDoubles()
{
    char num[100];
    char ch = _getch();
    int i = 0;
    bool dotPressed = 0;//если точка или запятая не были введены
    while (ch != ENTER)
    {
        if (!i && ch == MINUS)
        {
            cout << ch;
            num[i] = ch;
            i++;
            ch = _getch();
            continue;
 
        }
        if (ch > 47 && ch < 58)
        {
            cout << ch;
            num[i] = ch;
            i++;
            ch = _getch();
            continue;
        }
        if (ch == BACKSPACE && i)
        {
            i--;
            if (num[i] == COMMA || num[i] == DOT)
                dotPressed = false;
            num[i] = '\0';
            cout << "\b \b";
            ch = _getch();
            continue;
        }
        if (!dotPressed && (ch == DOT || ch == COMMA))
        {
            cout << ch;
            num[i] = ch;
            i++;
            ch = _getch();
            dotPressed = true;
            continue;
        }
        ch = _getch();
    }
    num[i] = '\0';
    return atof(num);
}
 
int main()
{
    double test=imputDoubles();
    cout<<endl<<test;
    system("pause");
}
Только единственное, что тут не проверяется, так это выход за пределы значений, но это уже слишком)
0
0 / 0 / 1
Регистрация: 19.02.2013
Сообщений: 130
19.10.2017, 06:30  [ТС]
К сожалению ни чем не могу помочь, я этим как 4 года уже не занимаюсь.
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
19.10.2017, 06:41
Цитата Сообщение от dak3 Посмотреть сообщение
Вот тебе максимальный уровень защиты от дурока.
максимально непереносимый.
0
19.10.2017, 06:45

Не по теме:

GbaLog-, не ведь от дур0ка же!!!

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.10.2017, 06:45

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

Защита от дурака
Вот кусок кода: do { cout &lt;&lt; &quot;Выберите вариант решения:&quot; &lt;&lt; endl; cout &lt;&lt; &quot; - первй вариант.&quot; &lt;&lt; endl; ...

Защита от дурака
Простое задание - создать матрицу mxm, заполнить в ручную или рандомно целыми , после чего отсортировать и вывести. С заданием я справился,...

защита от дурака
Знаю что таких тем уже было много, но в них я ничего полезного не нашел. Так вот задания: пользователь вводит элементы в массив, но нужно...

Защита от дурака
нужна защита от дурака пытался реализовать с помощью 2 разных способов не вышло. #include &lt;iostream&gt; #include &lt;string&gt; ...


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

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru