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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
vilkoqwerty
0 / 0 / 0
Регистрация: 02.03.2012
Сообщений: 3
#1

Определение типа вводимых данных - C++

02.03.2012, 12:42. Просмотров 1501. Ответов 16
Метки нет (Все метки)

Здравствуйте. Мне, как новичку, нужна помощь. Я делаю программу для работ с функциями. В начале программа просит нажать на цифру 1, 2 или 3. Если пользователь введет другое число, то программа его вернет обратно, но если он введет букву, то выходит ошибка. Вот я и думаю, что делать для того чтобы ошибка не появлялась.
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
int main(int argc, const char * argv[])
{
    // переменные
        double a, b, c, x1, x2, D, vertexX, vertexY;
        float choise1, choise2;
        cout << "Press: " << endl;
     g1:cout << "1 - Linear Equation" << endl;
        cout << "2 - Quadratic Equation" << endl;
        cout << "3 - Quit" << endl;
        cin >> choise1;
        if (choise1 == 1) {
            cout << "y = ax + b" << endl;
            cout << "Enter a" << endl;
            cin >> a;
            cout << "Enter b" << endl;
            cin >> b;
            if (b == 0) {
                cout << "\nIntersection with X axis is at: (0; 0)"<< endl;
                cout <<   "Intersection with Y axis is at: (0; 0)"<< endl;            
            }
            else {
                cout <<  "\nIntersection with X axis is at: (" << -b/a << "; 0)" << endl;
                cout << "Intersection with Y axis is at: (0; " << a*0 + b << ")" << endl;
            }
            
            if (a*1 + b < a*2 + b) {
                cout << "Increasing Function" << endl;
            }
            else if(a*1 + b > a*2 + b){
                cout << "Descreasing Function" << endl;
            }
            else {
                cout << "Parallel Function" << endl;
            }
            //choise 2
        g2: cout << "\nPress 1 to go to choise section, press 2 to quit" << endl;
            cin >> choise2;
            if (choise2 == 1) {
                goto g1;
            }
            else if (choise2 == 2) {
                exit(EXIT_SUCCESS);
            }
            else {
                cout << "You've pressed the wrong number (press 1 or 2)" << endl;
                goto g2;
            }
        }
        else if(choise1 == 2){
            cout << "y = ax^2 + bx + c" << endl;
            cout << "Enter a" << endl;
            cin >> a;
            cout << "Enter b" << endl;
            cin >> b;
            cout << "Enter c" << endl;
            cin >> c;
            
            vertexX = -b/(2*a);
            vertexY = a*vertexX*vertexX + b* vertexX + c;
            D = b*b - 4*a*c;
            
            cout << "\nVertex is at: (" << vertexX << "; " << vertexY << ")" << endl;
            cout << "Discriminant = " << D << endl;
            
            if (D < 0) {
                cout << "No intersection with axis X" << endl;
                cout << "Intersection 1 with axis Y is at: (0; " << c << ")" << endl;
                cout << "Intersaction 2 with axis Y is at: ("<< -b/a << "; " << c << ")" << endl;
            }
            else if (D == 0) {
                x1 = (-b + sqrt(D))/(2*a);
                cout << "Intersection with axis X is at: (" << x1 << "; 0)" << endl;
                cout << "Intersaction with axis Y is at: (0; " << c << ") and ("<< -b/a << "; " << c << ")" << endl;
            }
            else {
                x1 = (-b + sqrt(D))/(2*a);
                x2 = (-b - sqrt(D))/(2*a);
                if (x1 > x2) {
                    cout << "Intersaction 1 with axis X is at: (" << x2 << "; 0)" << endl;
                    cout << "Intersaction 2 with axis X is at: (" << x1 << "; 0)" << endl;
                }
                else if (x1 < x2) {
                    cout << "Intersaction 1 with axis X is at: (" << x1 << "; 0)" << endl;
                    cout << "Intersaction 2 with axis X is at: (" << x2 << "; 0)" << endl;
                }
            }
            
            if (a > 0) {
                cout << " xв€€(-в€ћ; " << vertexX << ") - Function Descreases" << endl;
                cout << " xв€€(" << vertexX << "; +в€ћ) - Function Increases" << endl;
            }
            else if(a < 0) {
                cout << " xв€€(-в€ћ; " << vertexX << ") - Function Increases" << endl;
                cout << " xв€€(" << vertexX << "; +в€ћ) - Function Descreases" << endl;
            }
            else {
                if (a*1 + b < a*2 + b) {
                    cout << "Increasing Function" << endl;
                }
                else if(a*1 + b > a*2 + b){
                    cout << "Descreasing Function" << endl;
                }
                else {
                    cout << "Parallel Function" << endl;
                }
            }
            //choise 2
        g3: cout << "\nPress 1 to go to choise section, press 2 to quit" << endl;
            cin >> choise2;
            if (choise2 == 1) {
                goto g1;
            }
            else if (choise2 == 2) {
                exit(EXIT_SUCCESS);
            }
            else {
                cout << "You've pressed the wrong number (press 1 or 2)" << endl;
                goto g3;
            }
        }
        else if (choise1 == 3) {
            exit(EXIT_SUCCESS);
        }
        else if (choise1 == 'a' || choise1 == 'b' || choise1 =='c' || choise1 =='d' || choise1 =='e') {
            cout << "You've entered the letter" << endl;
        }
        
        else{
            cout << "You've pressed the wrong number (press 1, 2 or 3)" << endl;
            goto g1;
        }
 
    
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.03.2012, 12:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определение типа вводимых данных (C++):

Проверка типа вводимых данных. - C++
Собственно,как осуществить ? К примеру,здесь: int main() { int x; int y; cin &gt;&gt; x;

Проверка вводимых данных на соответствие типа - C++
Задание само очень простое - вычитание матриц, с помощью перегрузки функций (одна функция вычитает типы short, другая long double). ...

Определение типа данных - C++
К примеру вводим число 5, нужно определить что это тип int Если вводим какие-то символы, нужно определить, что это будет string А если...

Бинарный файл ( определение типа данных в нем) - C++
Добрый вечер! Есть такая задача, имеется файл который мы открываем в бинарном режиме через fstream. Как определить какого размера...

Согласно заданию реализовать класс абстрактного типа данных (далее АТД) как динамический массив. Для этого определение класса должно иметь следующие - C++
1. Согласно заданию реализовать класс абстрактного типа данных (далее АТД) как динамический массив. Для этого определение класса должно...

Проверка вводимых данных - C++
Доброго времени суток, форумчане. Я столкнулся с такой проблемой: при введении еденицы измерения, если та инициализирована ранее то все...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Байт
Эксперт C
15995 / 10263 / 1537
Регистрация: 24.12.2010
Сообщений: 19,358
02.03.2012, 14:24 #2
Вводи не в число, а в строку. И сам уже анализируй, что там находится, а не доверяй эту работу черному ящику.
thebvog
73 / 53 / 3
Регистрация: 20.02.2012
Сообщений: 239
02.03.2012, 14:26 #3
vilkoqwerty, или как вариант, хоть и не самый правильный - лови исключения конструкциями try { ... } catch(...) { ... }.
Nameless One
Эксперт С++
5771 / 3420 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
02.03.2012, 16:10 #4
Цитата Сообщение от thebvog Посмотреть сообщение
vilkoqwerty, или как вариант, хоть и не самый правильный - лови исключения конструкциями try { ... } catch(...) { ... }
только кто будет эти исключения кидать?
thebvog
73 / 53 / 3
Регистрация: 20.02.2012
Сообщений: 239
02.03.2012, 16:18 #5
Nameless One, он же вводит переменную типа double, и если букву вместо числа ввести, то по идее будет исключение, или я ошибаюсь. Но таким способом я ловил atoi, не знаю про cin.
Nameless One
Эксперт С++
5771 / 3420 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
02.03.2012, 16:23 #6
Цитата Сообщение от thebvog Посмотреть сообщение
или я ошибаюсь
да

Цитата Сообщение от thebvog Посмотреть сообщение
Но таким способом я ловил atoi, не знаю про cin.
только если в параллельной вселенной. К сожалению, большинство стандартных функций С++ не кидают исключения там, где, по идее, их можно было бы ожидать

Добавлено через 1 минуту
Хотя для потоков это поведение можно поменять: http://cplusplus.com/reference/iostream/ios/exceptions/
thebvog
73 / 53 / 3
Регистрация: 20.02.2012
Сообщений: 239
02.03.2012, 16:28 #7
Nameless One, а, блин, точно, я же не в С++ это ловил, вот и память
Тогда может просто строку считывать, и если нет символов в число переводить.
BRcr
4008 / 2297 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
02.03.2012, 17:56 #8
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
    double a, b, c, x1, x2, D, vertexX, vertexY;
    int choise1, choise2;
g1:
    do {
        clrscr( );
        cin.clear( );
        cin.sync( );
        cout << "Press: " << endl;
        cout << "1 - Linear Equation" << endl;
        cout << "2 - Quadratic Equation" << endl;
        cout << "3 - Quit" << endl;
        cin >> choise1;
    } while ( choise1 != 1 && choise1 != 2 && choise1 != 3 );
 
    if ( choise1 == 1 ) {
        //...
    }
    else if ( choise1 == 2 ) {
        //...
    }
    else if ( choise1 == 3 ) {
        //...
    }
    else {
        goto g1;
    }
Кстати, лучше-таки научитесь не использовать метки - ничего особо хорошего в них нет.
thebvog
73 / 53 / 3
Регистрация: 20.02.2012
Сообщений: 239
02.03.2012, 18:05 #9
BRcr,

Не по теме:

метки вещь полезная, если низкоуровневая программа

vilkoqwerty
0 / 0 / 0
Регистрация: 02.03.2012
Сообщений: 3
02.03.2012, 18:10  [ТС] #10
А чем можно их заменить?
thebvog
73 / 53 / 3
Регистрация: 20.02.2012
Сообщений: 239
02.03.2012, 18:12 #11
vilkoqwerty, условиями, вызовами функций, например.
Nameless One
Эксперт С++
5771 / 3420 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
02.03.2012, 18:15 #12
thebvog, + механизм исключений, который так же позволяет «прыгать» по стеку вызовов функций. Также в некоторых современных языках высокого уровня введены новые средства для управления потоком выполнения приложения, например, сопрограммы (coroutines) в Python (конструкция yield) и продолжения (continuations) в Scheme.
Но это уже другой вопрос, так что прекращаем офтоп.
thebvog
73 / 53 / 3
Регистрация: 20.02.2012
Сообщений: 239
02.03.2012, 18:19 #13
Nameless One,

Не по теме:

+Asm

BRcr
4008 / 2297 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
02.03.2012, 18:31 #14
Цитата Сообщение от vilkoqwerty Посмотреть сообщение
А чем можно их заменить?
В основном комбинациями циклов и условий. Если условия сложные и многоуровневые, то, чтобы повысить их читабельность, старайтесь разделять код по функционалу и раскидывать в функции, заменяя таким образом куски кода вызовами соответствующих функций. Тогда в вашем коде будет проще разбираться - и вам в том числе.
Nameless One
02.03.2012, 18:36     Определение типа вводимых данных
  #15
 Комментарий модератора 
Еще раз напоминаю всем присутствующим, здесь обсуждается проверка вводимых данных на корректность.
Желающим обсудить вопрос меток и их аналогов в языках высокого уровня — создавайте новую тему. Дальнейшие сообщения не по теме будут удалены, провинившиеся (возможно) — наказаны.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.03.2012, 18:36
Привет! Вот еще темы с ответами:

Проверка вводимых данных. - C++
предполагается, что функция будет проверять, что ввел пользователь, и, если он ввел не натуральное число заранее заданного диапазона,...

Проверка вводимых данных - C++
#include &lt;iostream&gt; using namespace std; int main() { double a, b, c; cout &lt;&lt; &quot;Enter the first side of the...

Проверка вводимых данных - C++
Вот часть программы int main(void) { int vop; setlocale(LC_ALL, &quot;Russian&quot;); int mas1, mas2, mas3, outmas; int ke1, ke2,...

Определение типа! - C++
У меня такой вопрос. Как можно узнать какой тип вводится? Например так: int a; int b; cout &lt;&lt; &quot;Enter symbol: &quot;; cin &gt;&gt; a; ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
02.03.2012, 18:36
Ответ Создать тему
Опции темы

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