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

Поломка программы из-за символа - C++

Восстановить пароль Регистрация
 
Corax111
0 / 0 / 0
Регистрация: 16.06.2013
Сообщений: 74
30.08.2013, 01:35     Поломка программы из-за символа #1
Вод код. Программа работает нормально, но если ввести туда символ, или знак типа * или / то она летит... как сделать так, чтобы нельзя было вводить символы, либо такие знаки? Точнее, чтобы при вводе их был просто выход из программы, или вообще ничего не происходило?...

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
#include <iostream>
 
using namespace std;
 
int main ()
{
    setlocale(LC_ALL, "Russian");
 
    int x;
    int y;
    int o;
 
 
 
    while (true) 
    {
 
        cout << "1 - умножение" << endl;
        cout << "2 - деление" << endl;
        cout << "3 - сложение" << endl;
        cout << "4 - вычитание" << endl;
        cout << "5 - возведение в квадрат" << endl;
        cout << "6 - возведение в куб" << endl;
        cout << "7 - остаток от числа" << endl;
        cin >> o;
        if (o == 1) 
        {
        cout << "Введите два числа," << "которые Вы хотите перемножить." << endl;
        cin >> x;
        cin >> y;
        cout << "Ответ: ";
        cout << x*y << endl;
        
        }
        if (o == 2) 
        {
        cout << "Введите два числа," << "которые Вы хотите разделить." << endl;
        cin >> x;
        cin >> y;
        cout << "Ответ: ";
        cout << x/y << endl;
        }
 
        if (o == 3) 
        {
        cout << "Введите два числа," << "которые Вы хотите сложить." << endl;
        cin >> x;
        cin >> y;
        cout << "Ответ: ";
        cout << x+y << endl ;
        }
    
        if (o == 4) 
        {
        cout << "Введите два числа," << "которые Вы хотите вычесть." << endl;
        cin >> x;
        cin >> y;
        cout << "Ответ: ";
        cout << x-y << endl;
        }
        if (o == 5) 
        {
        cout << "Введите число, которое хотите возвести в квадрат." << endl;
        cin >> x;
        cout << "Ответ: ";
        cout << x*x << endl;
        }
        if (o == 6) 
            {
            cout << "Введите число, которое хотите возвести в куб." << endl;
            cin >> x;
            cout << "Ответ: ";
            cout << x*x << endl;
            }
        if (o == 7) 
        {
        cout << "Введите числа, остаток от которых вам нужен." << endl;
        cin >> x;
        cin >> y;
        cout << "Ответ: ";
        cout << x%y << endl;
        }
    
    }
        
}
Добавлено через 2 минуты
Такая же беда, если ввести слишком много цифр...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.08.2013, 01:35     Поломка программы из-за символа
Посмотрите здесь:

C++ Повтор программы после ввода символа
2 символа s2 последние и средние 3 символа s1 - соединить C++
C++ Определить последнее вхождение символа “р” в строке и вывести строку, начиная с первого символа и до последнего “р” в строке
C++ Если в тексте нет символа +, то оставить текст без изменения, иначе каждую из цифр, предшествующую первому вхождению символа +, заменить символом -
C++ нужана помощь в написание программы которая примет 3 любых символа (буквы,цыфри или значки ) и напечатает по возрастанию кода ASCII .
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.08.2013, 01:38     Поломка программы из-за символа #2
Цитата Сообщение от Corax111 Посмотреть сообщение
чтобы при вводе их был просто выход из программы,
C++
1
2
3
4
5
6
cin >> o;
if (!cin)
{
    system("pause");
    return 0;
}
kvadro
11 / 9 / 1
Регистрация: 12.03.2012
Сообщений: 127
30.08.2013, 01:48     Поломка программы из-за символа #3
C++
1
if ( !( cin >> o ) )
Добавлено через 6 минут
или вообще ничего не происходило?
Можно просто валидировать:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int getNumb()
{
    int n;
 
    while ( !( cin >> n ) )
    {
        cout << "Введите число! ";
        cin.clear();
        cin.ignore( numeric_limits<streamsize>::max(), '\n' );
    }
 
    return n;
}
 
// ...
 
x = getNumb();
y = getNumb();
isaew999
5 / 13 / 2
Регистрация: 19.09.2012
Сообщений: 172
30.08.2013, 09:50     Поломка программы из-за символа #4
Я бы посоветовал переделать с if на switch case, тогда и проблема отпадет сама собой. И можно сделать обработку исключения средствами самого switch с помощью default.
albert!
3 / 3 / 0
Регистрация: 23.01.2013
Сообщений: 45
30.08.2013, 13:17     Поломка программы из-за символа #5
Так здесь же ошибка в другом, по-моему. Символы * / и т.п не являются числами. А также, если ты вводишь большое число, то оно может быть слишком большим для значения типа int, используй long int
isaew999
5 / 13 / 2
Регистрация: 19.09.2012
Сообщений: 172
30.08.2013, 14:36     Поломка программы из-за символа #6
Цитата Сообщение от Corax111 Посмотреть сообщение
но если ввести туда символ, или знак типа * или / то она летит...
Вопрос тут как раз во вводе данных символов а не черезмерной величине числа. А с помощью switch case можно сделать все как надо, что все мат операции будут соответствовать своемусимвольному значению, а не цыфрам 1, 2, 3, ...... и т.д.
Ermak_nk
6 / 6 / 0
Регистрация: 11.08.2012
Сообщений: 109
30.08.2013, 15:17     Поломка программы из-за символа #7
Когдато делал нечто подобное, может поможет
C++ (Qt)
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
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
int main(void)
{
    double a, c;
    char b;
    cout << "Enter the example: ";
    cin >> a >> b >> c;
    switch (b)
    {
    case '+':
        cout << a << "+" << c << "=" << a + c << endl;
        break;
    case '-':
        cout << a << "-" << c << "=" << a - c << endl;
        break;
    case '*':
        cout << a << "*" << c << "=" << a * c << endl;
        break;
    case '/':
        cout << a << "/" << c << "=" << a / c << endl;
        break;
    case 'sin':
        cout << "sin" << c << " = " << sin(c) << endl;
        break;
    case 'cos':
        cout << "cos" << c << " = " << cos(c) << endl;
        break;
    case 'tg':
        cout << "tg" << c << " = " << sin(c)/cos(c) << endl;
        break;
    default:
        break;
    }
    getch ();
    return 0;
}
Еще есть вариант все вводить в символьном виде в строку, а дальше преобразовывать строку в числа и операции.

Добавлено через 27 минут
Только что обратил внимание - по поводу sin, cos, tg - там несколько символов, так что эти строки не совсем правильные, делал когда только начинал изучать язык
albert!
3 / 3 / 0
Регистрация: 23.01.2013
Сообщений: 45
30.08.2013, 20:02     Поломка программы из-за символа #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
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
#include <cstdlib>
#include <iostream>
#include <conio.h>
 
 
 
using namespace std;
 
int main ()
{
    setlocale(LC_ALL, "Russian");
 
    int x;
    int y;
    char o;
    o = getch();
    
    
 
 
 
    while (true) 
    {
 
        cout << "1 - ГіГ¬Г*îæåГ*ГЁГҐ" << endl;
        cout << "2 - äåëåГ*ГЁГҐ" << endl;
        cout << "3 - ñëîæåГ*ГЁГҐ" << endl;
        cout << "4 - âû÷èòГ*Г*ГЁГҐ" << endl;
        cout << "5 - âîçâåäåГ*ГЁГҐ Гў ГЄГўГ*äðГ*ГІ" << endl;
        cout << "6 - âîçâåäåГ*ГЁГҐ Гў ГЄГіГЎ" << endl;
        cout << "7 - îñòГ*òîê îò Г·ГЁГ±Г«Г*" << endl;
        cin >> o;
        switch(o)
        
        {
                 case '1':
        cout << "Ââåäèòå äâГ* Г·ГЁГ±Г«Г*," << "êîòîðûå Âû õîòèòå ïåðåìГ*îæèòü." << endl;
        cin >> x;
        cin >> y;
        cout << "ГЋГІГўГҐГІ: ";
        cout << x*y << endl;
        break;
        
        
        case '2':
        
        cout << "Ââåäèòå äâГ* Г·ГЁГ±Г«Г*," << "êîòîðûå Âû õîòèòå Г°Г*çäåëèòü." << endl;
        cin >> x;
        cin >> y;
        cout << "ГЋГІГўГҐГІ: ";
        cout << x/y << endl;
        break;
        
 
        case '3':
        
        cout << "Ââåäèòå äâГ* Г·ГЁГ±Г«Г*," << "êîòîðûå Âû õîòèòå ñëîæèòü." << endl;
        cin >> x;
        cin >> y;
        cout << "ГЋГІГўГҐГІ: ";
        cout << x+y << endl ;
        break;
    
        case '4': 
        
        cout << "Ââåäèòå äâГ* Г·ГЁГ±Г«Г*," << "êîòîðûå Âû õîòèòå âû÷åñòü." << endl;
        cin >> x;
        cin >> y;
        cout << "ГЋГІГўГҐГІ: ";
        cout << x-y << endl;
        
        case '5':
        
        cout << "Ââåäèòå ÷èñëî, êîòîðîå õîòèòå âîçâåñòè Гў ГЄГўГ*äðГ*ГІ." << endl;
        cin >> x;
        cout << "ГЋГІГўГҐГІ: ";
        cout << x*x << endl;
        break;
        case '6': 
            
            cout << "Ââåäèòå ÷èñëî, êîòîðîå õîòèòå âîçâåñòè Гў ГЄГіГЎ." << endl;
            cin >> x;
            cout << "ГЋГІГўГҐГІ: ";
            cout << x*x << endl;
            break;
            
        case '7':
        
        cout << "Ââåäèòå Г·ГЁГ±Г«Г*, îñòГ*òîê îò êîòîðûõ ГўГ*Г¬ Г*óæåГ*." << endl;
        cin >> x;
        cin >> y;
        cout << "ГЋГІГўГҐГІ: ";
        cout << x%y << endl;
        break;
        default: cout << "ГЌГҐГЇГ°Г*âèëüГ*ûé ââîä" <<endl;
        break;
       
 
}
    }
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.08.2013, 20:22     Поломка программы из-за символа
Еще ссылки по теме:

C++ Копирование из строки от символа до символа
C++ Вместо 1-го символа, нужно чтобы 2 символа считывалось!
Создать строку: с начало три символа первой строки, потом эти же три символа в обратном порядке C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.08.2013, 20:22     Поломка программы из-за символа #9
Цитата Сообщение от albert! Посмотреть сообщение
но короче как-то так.
Как насчёт этого, в вашей программе?
Цитата Сообщение от Corax111 Посмотреть сообщение
Программа работает нормально, но если ввести туда символ,
Yandex
Объявления
30.08.2013, 20:22     Поломка программы из-за символа
Ответ Создать тему
Опции темы

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