Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
14 / 14 / 0
Регистрация: 01.04.2015
Сообщений: 96
1

Ошибка времени исполнения при вводе букв вместо числа

30.11.2016, 18:21. Показов 3866. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток. Помогите пожалуйста.
При запуске кода, открывается программа, когда пишу туда буквы, а не цифры, то программа вылетает, тоже самое происходит при том, когда допустим в умножении умножаю число на 0 - вылетает, те нужно проверка с нулем, как реализовать не понимаю.
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
#include "stdafx.h"
#include <iostream>
#include "cmath" 
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Rus");
   int a, b, c, d, z = 1, o, k, l, t, f;
   double x,y,p;
    while (z != 5) {
        cout << "Введите:" << endl;
        cout << "1 - Найти сумму" << endl;
        cout << "2 - Найти разность" << endl;
        cout << "3 - Найти произведение" << endl;
        cout << "4 - Найти частное" << endl;
        cout << "5 - выйти" << endl;
        cin >> z;
        switch (z)
        {
        case 1: {
 
            cout << "Введите b,c" << endl;
            cin >> b >> c;
            x = b+c;
            cout << "x = " << x << endl;
            break;
        }
        case 2: {
            cout << "Введите d,o" << endl;
            cin >> d >> o;
            y = d - o;
            cout << "y = " << y << endl;
            break;
        }
        case 3: {
            cout << "Введите k,l" << endl;
            cin >> k >> l;
        z = k * l;
            cout << "z = " << z << endl;
            break;
        }
        case 4:
        {
            cout << "Введите t,f";
            cin >> t >> f;
            p = t / f;
            cout << "p = " << p;
            break;
        }
        }
    }
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.11.2016, 18:21
Ответы с готовыми решениями:

Ошибка исполнения при вводе данных из файла
Добрый вечер, при выполнении кода #define _CRT_SECURE_NO_WARNINGS #include &lt;stdio.h&gt; #include...

Нужна процедура, которая сообщает об ошибке при вводе букв вместо цифр
привет. У меня программа , которая переводит введеное в 10с.с число в 2 с.с, но не получается...

Ошибка времени исполнения: нарушение прав доступа при чтении
Как исправить. В функции decode вторая строка. Необработанное исключение по адресу 0x00FD6A4F в...

Ошибка при вводе времени
В чем ошибка? Вроде объявил все, но когда ввожу &quot;12:30&quot; выдает ошибку Sub Vvod() Dim NP%,...

9
21 / 21 / 8
Регистрация: 07.08.2015
Сообщений: 48
30.11.2016, 18:37 2
Предполагаю, что у вас вылетает когда вы не умножаете на 0, а делите на 0. Возникает ошибка времени выполнения. Так как в C++ все что не 0 - true, а 0 - false, то сделайте проверку простым условием.

C++
1
2
3
4
5
int first_operand = 12, second_operand = 0;
if(second_operand)
    result = first_operand / second_operand;
else
    cerr << "Ага ! Вот мы и поймали тебя, 0" << endl;
Таким образом, предотвращается деление на ноль. А дальше вы уже сами можете описать, что делать при обнаружении этого недоразумения.
1
14 / 14 / 0
Регистрация: 01.04.2015
Сообщений: 96
30.11.2016, 18:47  [ТС] 3
Получилось, спасибо. А при введение букв вместо цифр, как бы, подскажите пожалуйста.
0
21 / 21 / 8
Регистрация: 07.08.2015
Сообщений: 48
30.11.2016, 18:50 4
Объект cin возвращает true, если ввод успешен и false, если что-то не получилось. Это можно использовать так

C++
1
2
3
4
5
6
7
int x = 0;
cin >> x;
 
if(cin)
  cout << "Успешно !" << endl;
else
  cout << "Эй, тут должно быть число" << endl;
0
14 / 14 / 0
Регистрация: 01.04.2015
Сообщений: 96
30.11.2016, 19:06  [ТС] 5
Получилось такое, теперь ничего не работает))
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
#include "stdafx.h"
#include <iostream>
#include "cmath" 
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Rus");
   int a, b, c, d, z = 1, o, k, l, t, f, result;
   int first_operand = 12, second_operand = 0;
   int e = 0;
   double x,y,p;
    while (z != 5) {
        cout << "Введите:" << endl;
        cout << "1 - Найти сумму" << endl;
        cout << "2 - Найти разность" << endl;
        cout << "3 - Найти произведение" << endl;
        cout << "4 - Найти частное" << endl;
        cout << "5 - выйти" << endl;
        cin >> z;
        switch (z)
        {
cin >> e;
 
if(cin)
  cout << "Успешно !" << endl;
else
  cout << "Эй, тут должно быть число" << endl;
 
        case 1: {
 
            cout << "Введите b,c" << endl;
            cin >> b >> c;
            x = b+c;
            cout << "x = " << x << endl;
            break;
        }
        case 2: {
            cout << "Введите d,o" << endl;
            cin >> d >> o;
            y = d - o;
            cout << "y = " << y << endl;
            break;
        }
        case 3: {
            cout << "Введите k,l" << endl;
            cin >> k >> l;
        z = k * l;
            cout << "z = " << z << endl;
            break;
        }
        case 4:
        {
            cout << "Введите t,f";
            cin >> t >> f;
            p = t / f;
            cout << "p = " << p;
if(second_operand)
    result = first_operand / second_operand;
else
    cerr << "Ага ! Вот мы и поймали тебя, 0" << endl;
 
            break;
        }
        }
    }
    return 0;
}
0
21 / 21 / 8
Регистрация: 07.08.2015
Сообщений: 48
30.11.2016, 19:23 6
В конструкции switch не может быть инструкций, только case блоки и default.
0
14 / 14 / 0
Регистрация: 01.04.2015
Сообщений: 96
30.11.2016, 21:26  [ТС] 7
Так и в while тоже не работает

Добавлено через 1 час 51 минуту
помогите пожалуйста
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
30.11.2016, 21:55 8
Лучший ответ Сообщение было отмечено locusman как решение

Решение

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
int main()
{
   setlocale(LC_ALL, "Rus");
   int a, b, c, d, z = 1, o, k, l, t, f, result;
   int first_operand = 12, second_operand = 0;
   double x,y,p;
    while (z != 5) 
    {
        cout << "Введите:" << endl;
        cout << "1 - Найти сумму" << endl;
        cout << "2 - Найти разность" << endl;
        cout << "3 - Найти произведение" << endl;
        cout << "4 - Найти частное" << endl;
        cout << "5 - выйти" << endl;
        while (true)
        {
            if (!(cin >> z))
            {
                cin.clear();
                while (cin.get() != '\n');
                cout << "Эй, тут должно быть число" << endl;
            }
            else if (z < 1 || z > 5)
                cout << "Не то число!" << endl;
            else
                break;
        }
        cout << "Успешно !" << endl;
        switch (z)
        {
            case 1: 
            {
 
                cout << "Введите b,c" << endl;
                cin >> b >> c;
                x = b+c;
                cout << "x = " << x << endl;
                break;
            }
            case 2: 
            {
                cout << "Введите d,o" << endl;
                cin >> d >> o;
                y = d - o;
                cout << "y = " << y << endl;
                break;
            }
            case 3: 
            {
                cout << "Введите k,l" << endl;
                cin >> k >> l;
                z = k * l;
                cout << "z = " << z << endl;
                break;
            }
            case 4:
            {
                cout << "Введите t,f";
                cin >> t >> f;
                p = t / f;
                cout << "p = " << p;
                if(second_operand)
                    result = first_operand / second_operand;
                else
                    cerr << "Ага ! Вот мы и поймали тебя, 0" << endl;
 
                break;
            }
        }
    }
    return 0;
}
1
14 / 14 / 0
Регистрация: 01.04.2015
Сообщений: 96
30.11.2016, 22:01  [ТС] 9
С буквами - спасибо, работает.
А с нулем, при делении все та же проблема, выкидывает с ошибкой "Integer division by zero "
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
30.11.2016, 22:03 10
Цитата Сообщение от locusman Посмотреть сообщение
А с нулем, при делении все та же проблема, выкидывает с ошибкой "Integer division by zero "
С нулём не смотрел, посчитал, что ты эту проблему решил, раз так написал (3 пост):
Цитата Сообщение от locusman Посмотреть сообщение
Получилось, спасибо.
0
30.11.2016, 22:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.11.2016, 22:03
Помогаю со студенческими работами здесь

Ошибка при вводе данных - две записи вместо одной
Здравствуйте! Сделала маленькую базу данных для ввода пациентов, участвующих в исследовании. одна...

Ошибка времени исполнения
Доброго времени суток! Опираясь на...

Ошибка времени исполнения
Помогите разобраться с ошибкой. Проблема только в функции create_file. Почему-то когда запускается...

Дана строка с набором случайных символов, при вводе 10 букв первые 5 букв становятся большими , вторые 5 букв маленькими
Дана строка с набором случайных символов, при вводе 10 букв первые 5 букв становятся большими ,...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru