Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
Праздник
0 / 0 / 0
Регистрация: 14.09.2013
Сообщений: 15
1

как поставить защиту от дураков?

14.09.2013, 17:52. Просмотров 518. Ответов 7
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "stdafx.h"
#include <math.h>
#include <clocale>
#include <iostream>
using namespace std;
 
 
int main ()
{
    setlocale(LC_ALL, "Russian");
     double grad=0,rez=0, rad=0;
     const double PI = 3.1415;
           cout << "Введите значение в градусах: \n";
           cin >> grad; 
           rad=(grad*PI)/180; //Программа переводит значение записаное в градсах в радианы
         rez=pow(cos(rad),2); //Возведение в квадрат
         cout <<  rez << endl; 
   system ("pause");
 return 0;
}
Нужно сделать защиту от "дураков", не знаю как реализовать,
когда пользователь вводит букву или что то еще кроме цифр, надо чтоб прога выдавала ошибку
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.09.2013, 17:52
Ответы с готовыми решениями:

Защита от дураков
В функцию добавления, нужно добавить защиту от дураков: void Newadd() { ...

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

как сделать защиту от дурака в этом коде?
как сделать чтобы при вводе чисел больше 20 или букв писало о неправильно...

Как сделать защиту считывания данных в int?
Помогите сделать защиту от введения букв и цифр больше или меньше 10 #include...

Как написать защиту от некорректного ввода для моей проги?
void task_1(int **A, int M, int N) { int i=0, sum=0; //1.) сумму элементов в...

7
SummerRain
327 / 326 / 92
Регистрация: 16.12.2012
Сообщений: 544
14.09.2013, 17:58 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
#include <math.h>
#include <clocale>
#include <iostream>
using namespace std;
 
 
int main ()
{
    setlocale(LC_ALL, "Russian");
    double grad=0,rez=0, rad=0;
    const double PI = 3.1415;
    cout << "Введите значение в градусах: \n";
    while (true) {
        cin >> grad; 
        if (!cin) {
            cout << "Введите число!" << endl;
            cin.sync();
            cin.clear();
        }
        else break;
    }
    rad=(grad*PI)/180; //Программа переводит значение записаное в градсах в радианы
    rez=pow(cos(rad),2); //Возведение в квадрат
    cout <<  rez << endl; 
    system ("pause");
    return 0;
}
1
ViktorKozlov
134 / 126 / 59
Регистрация: 13.12.2012
Сообщений: 293
14.09.2013, 17:58 3
C++
1
2
3
4
5
6
if (!(cin >> grad))
    {
        cout<<"Error";
        fflush(stdin);
        cin.clear();
    }
0
Праздник
0 / 0 / 0
Регистрация: 14.09.2013
Сообщений: 15
14.09.2013, 18:07  [ТС] 4
Спасибо
А если пользователь введет так: 54рпкгрпш,
или так: 5,,4

Добавлено через 3 минуты
Спасибо
А если пользователь введет так: 54рпкгрпш,
или так: 5,,4
0
ViktorKozlov
134 / 126 / 59
Регистрация: 13.12.2012
Сообщений: 293
14.09.2013, 18:09 5
Тогда так
C++
1
2
3
4
5
6
if (!(cin >> grad))
    {
        cout<<"Error";
        cin.clear();
    }
    fflush(stdin);
И в результате получится число, которое до первой буквы
0
-=ЮрА=-
Заблокирован
Автор FAQ
14.09.2013, 18:36 6
Праздник, всё давным давно воплощено
Безопасный ввод через функцию-шаблон
0
Paket236
2 / 2 / 0
Регистрация: 16.08.2013
Сообщений: 52
15.09.2013, 01:06 7
Праздник
Писал давненько такую штуку для себя:
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
int vvodsogr(int dl=6, int ot=0, int do_=-1);
int CharToInt(char* mas);
 
int main()
{
    vvodsogr();
    return 0;
}
 
int CharToInt(char* mas)
{
    int x=0;
    for(; *mas!=0; )
    {   x*=10;
        x+=(*mas-48);
        mas++;
    }
    return x;
}
 
int vvodsogr(int dl, int ot, int do_)
{
    int i;
    char vv0d[80]="\0";
    fflush(stdin);
    fgets(vv0d, sizeof(vv0d), stdin);
    for(i=0; (unsigned)i<strlen(vv0d); i++) {if(vv0d[i]=='\n') vv0d[i]=0;}
    
    if(vv0d[0]==0) return -1;
    for(i=0; vv0d[i]!=0; i++)
    {
        if(int(vv0d[i]-48)<0 || int(vv0d[i]-48)>9 || i==dl) return -1;
    }
    if( (CharToInt(vv0d)<ot && ot!=0) ||
        (CharToInt(vv0d)>do_ && do_!=-1) ) return -1;
    else return CharToInt(vv0d);
}

Функция vvodsogr() возвращает введённое число либо -1, если это не число. Первый параметр - максимальная длина числа, остальные два - не помню
Да, и работает только с положительными числами.
0
gray_fox
What a waste!
1553 / 1258 / 166
Регистрация: 21.04.2012
Сообщений: 2,636
Завершенные тесты: 3
15.09.2013, 02:21 8
Цитата Сообщение от ViktorKozlov Посмотреть сообщение
fflush(stdin);
Нельзя так с потоками ввода, вызывает неопределённое поведение.
0
15.09.2013, 02:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.09.2013, 02:21

Написать проверку на соответствие ввода целочисленному типу ("защита от дураков")
Когда вводят букву программа зацикливается int get_move(int i){ ...

Как с scanf сделать "защиту от дурака"?
Нужно, чтобы пользователь ввел две целочисленные переменные. Как делал я: ...

как в if поставить for?
Надо для всех значений массива проверить, равно ли какому либо из этих значений...


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

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

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