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

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

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

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

02.03.2012, 12:42. Просмотров 1473. Ответов 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++
Собственно,как осуществить ? К примеру,здесь: int main() { int x; int y; cin &gt;&gt; x;

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

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

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

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

Проверка вводимых данных - 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
15636 / 9978 / 1499
Регистрация: 24.12.2010
Сообщений: 18,742
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
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,444
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
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,444
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
4006 / 2295 / 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
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,444
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
4006 / 2295 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
02.03.2012, 18:31     Определение типа вводимых данных #14
Цитата Сообщение от vilkoqwerty Посмотреть сообщение
А чем можно их заменить?
В основном комбинациями циклов и условий. Если условия сложные и многоуровневые, то, чтобы повысить их читабельность, старайтесь разделять код по функционалу и раскидывать в функции, заменяя таким образом куски кода вызовами соответствующих функций. Тогда в вашем коде будет проще разбираться - и вам в том числе.
Nameless One
02.03.2012, 18:36
  #15
 Комментарий модератора 
Еще раз напоминаю всем присутствующим, здесь обсуждается проверка вводимых данных на корректность.
Желающим обсудить вопрос меток и их аналогов в языках высокого уровня — создавайте новую тему. Дальнейшие сообщения не по теме будут удалены, провинившиеся (возможно) — наказаны.
vilkoqwerty
0 / 0 / 0
Регистрация: 02.03.2012
Сообщений: 3
04.03.2012, 16:26  [ТС]     Определение типа вводимых данных #16
А как вы бы заменили goto в данном случае?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.03.2012, 16:27     Определение типа вводимых данных
Еще ссылки по теме:

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

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

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

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

Проверка на коректность вводимых данных - C++
Есть такой код где данные вводятся целого типа( int x; cin &gt;&gt; x; ). Вопрос такой как проверить действительно ли введено число либо нет...


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

Или воспользуйтесь поиском по форуму:
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,444
04.03.2012, 16:27     Определение типа вводимых данных #17
vilkoqwerty, цикл do ... while, например. Либо (еще лучше) вынести ввод данных в отдельную функцию, которая может сигнализировать об успехе или неудаче операции
Yandex
Объявления
04.03.2012, 16:27     Определение типа вводимых данных
Ответ Создать тему
Опции темы

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