Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Corax111
0 / 0 / 0
Регистрация: 16.06.2013
Сообщений: 74
#1

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

30.08.2013, 01:35. Просмотров 377. Ответов 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
#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 минуты
Такая же беда, если ввести слишком много цифр...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.08.2013, 01:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Поломка программы из-за символа (C++):

Повтор программы после ввода символа - C++
На форуме уже данная тема была, но не один из примеров приведенных в ней не работает... Как реализовать повтор программы, с помощью char...

Неправльная работа программы при вводе нецифрового символа - C++
если ввести в этот код не цифру про программа уходит в вечный цикл. почему так происходит и что можно сделать? int d = 0; do ...

Работа функции cin.get(): не дожидается ввода символа в конце программы - C++
Доброго времени суток, столкнулся с таким странным поведением cin.get(), после окончания ввода списка (ответ n) вместо того, что бы в конце...

Как скопировать подстроку из строки до определенного символа? Или удалить, начиная с этого символа - C++
Добрый вечер. Ответ искал, но не нашёл. Предположим, есть строка: ABC|DEF Надо скопировать всё до | , т.е., в приведённом...

Вместо 1-го символа, нужно чтобы 2 символа считывалось! - C++
#include &lt;stdio.h&gt; #include &lt;string.h&gt; int main() { char str; char c; char *word; const char delim = &quot;...

Завершение программы при вводе символа - C (СИ)
Задача такая: написать программу, которая переводит температуру по Форенгейту в температуру по Цельсию и по Кельвину. Самое главное:...

8
alsav22
5426 / 4821 / 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;
}
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();
0
isaew999
5 / 13 / 2
Регистрация: 19.09.2012
Сообщений: 187
30.08.2013, 09:50 #4
Я бы посоветовал переделать с if на switch case, тогда и проблема отпадет сама собой. И можно сделать обработку исключения средствами самого switch с помощью default.
0
albert!
3 / 3 / 0
Регистрация: 23.01.2013
Сообщений: 45
30.08.2013, 13:17 #5
Так здесь же ошибка в другом, по-моему. Символы * / и т.п не являются числами. А также, если ты вводишь большое число, то оно может быть слишком большим для значения типа int, используй long int
0
isaew999
5 / 13 / 2
Регистрация: 19.09.2012
Сообщений: 187
30.08.2013, 14:36 #6
Цитата Сообщение от Corax111 Посмотреть сообщение
но если ввести туда символ, или знак типа * или / то она летит...
Вопрос тут как раз во вводе данных символов а не черезмерной величине числа. А с помощью switch case можно сделать все как надо, что все мат операции будут соответствовать своемусимвольному значению, а не цыфрам 1, 2, 3, ...... и т.д.
0
Ermak_nk
8 / 8 / 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 - там несколько символов, так что эти строки не совсем правильные, делал когда только начинал изучать язык
0
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;
       
 
}
    }
}
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.08.2013, 20:22 #9
Цитата Сообщение от albert! Посмотреть сообщение
но короче как-то так.
Как насчёт этого, в вашей программе?
Цитата Сообщение от Corax111 Посмотреть сообщение
Программа работает нормально, но если ввести туда символ,
0
30.08.2013, 20:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.08.2013, 20:22
Привет! Вот еще темы с ответами:

Изменение хода программы при нажатии символа - Pascal ABC
Добрый день! Научите как запрограммировать на Паскале: Например, печатается какой-то символ бесконечно. Нажимается другой символ и...

Поломка системы - Windows XP
Здравствуйте! подскажите, что случилось с компьютером. Воебщем система полетела точно. И теперь. когда я заново её переустанавливаю. во...

Неизвестная поломка - Ноутбуки
Здравствуйте, Господа. Я-новенькая. Сразу хочу сообщить, что я технический кретин. Не полОжили,когда всем раздали мозги-мне...

поломка виндовс - Windows 7
в кратце! был вчера у девушки хотели посмотреть фильм,но у нее что то со звуком он пропадает,тогда нужно было зайти в диспетчер устройств...


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

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

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