Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Праздник
0 / 0 / 0
Регистрация: 14.09.2013
Сообщений: 15
14.09.2013, 17:52     как поставить защиту от дураков? #1
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;
}
Нужно сделать защиту от "дураков", не знаю как реализовать,
когда пользователь вводит букву или что то еще кроме цифр, надо чтоб прога выдавала ошибку
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.09.2013, 17:52     как поставить защиту от дураков?
Посмотрите здесь:

C++ Защита от дураков
Как поставить условие C++
как поставить EOF? C++
C++ Как поставить степень в C++
как написать защиту от некоретного ввода для моей проги C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SummerRain
 Аватар для SummerRain
325 / 324 / 17
Регистрация: 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;
}
ViktorKozlov
133 / 125 / 2
Регистрация: 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
Регистрация: 14.09.2013
Сообщений: 15
14.09.2013, 18:07  [ТС]     как поставить защиту от дураков? #4
Спасибо
А если пользователь введет так: 54рпкгрпш,
или так: 5,,4

Добавлено через 3 минуты
Спасибо
А если пользователь введет так: 54рпкгрпш,
или так: 5,,4
ViktorKozlov
133 / 125 / 2
Регистрация: 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);
И в результате получится число, которое до первой буквы
-=ЮрА=-
Заблокирован
Автор FAQ
14.09.2013, 18:36     как поставить защиту от дураков? #6
Праздник, всё давным давно воплощено
Безопасный ввод через функцию-шаблон
Paket236
2 / 2 / 0
Регистрация: 16.08.2013
Сообщений: 48
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, если это не число. Первый параметр - максимальная длина числа, остальные два - не помню
Да, и работает только с положительными числами.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.09.2013, 02:21     как поставить защиту от дураков?
Еще ссылки по теме:

C++ как в if поставить for?
Как с scanf сделать "защиту от дурака"? C++
C++ Поставить рандомную матрицу, перепробовал уже много способов. Как поставить?

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

Или воспользуйтесь поиском по форуму:
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
15.09.2013, 02:21     как поставить защиту от дураков? #8
Цитата Сообщение от ViktorKozlov Посмотреть сообщение
fflush(stdin);
Нельзя так с потоками ввода, вызывает неопределённое поведение.
Yandex
Объявления
15.09.2013, 02:21     как поставить защиту от дураков?
Ответ Создать тему
Опции темы

Текущее время: 13:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru