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

Почему выводятся все ошибки, а не одна? - C++

Восстановить пароль Регистрация
 
Sony D
0 / 0 / 0
Регистрация: 27.09.2014
Сообщений: 8
19.11.2014, 17:08     Почему выводятся все ошибки, а не одна? #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
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
136
#include <iostream>
#include <iomanip>
#include <ctime>
 
using namespace std;
 
void bubbleSort(int *, int);
 
int main()
{
    setlocale(LC_ALL, "Rus");
    srand(time(NULL));
    
    int size_array;
    
    int choise;
    cout<<"Выберите один из методов:\n1. Вручную вводить числа массива.\n2. Программа случайно выведет числа массива.\n";
    cin>>choise;
    
    try
    {
        if (choise == 1)
        {
            cout<<"Вы выбрали вручной ввод.\n";
            cout<<"Размер массива:";
            cin>>size_array;
            if (size_array<0)
            {
                throw 1;
            }
            int *arr = new int[size_array];
            cout<<"Вводите числа:\n";
            for (int counter=0; counter<size_array; counter++)
            {
                cin>>arr[counter];
            }
            cout<<"Ваш массив:\n";
            for (int counter = 0; counter<size_array; counter++)
            {
                cout<<setw(2)<<arr[counter]<<" ";
            }
            bubbleSort(arr, size_array);
        }
    
        if (choise == 2)
        {
            cout<<"Вы выбрали метод случайного ввода чисел.\n";
            cout<<"Размер массива:";
            cin>>size_array;
            if (size_array<0)
            {
                throw 1;
            }
            int max;
            cout<<"Введите максимальное значение случайного числа: ";
            cin>>max;
            int min;
            cout<<"Введите минимальное значение случайного числа: ";
            cin>>min;
            if (min>max)
            {
                throw 2;
            }
            if (max>2147483647)
            {
                throw 3;
            }
            if (min<-2147483648)
            {
                throw 4;
            }
            int *arr = new int[size_array];
            for (int counter=0; counter<size_array; counter++)
            {
                arr[counter] = rand()%(max-min)+min;
                cout<<setw(2)<<arr[counter]<<" ";
            }
            cout<<"\n\n";
            bubbleSort(arr, size_array);
        }
    
        else 
        {
            cout<<"Такого метода не существует\n";
        }
        
        system("pause");
        return 0;
    }
 
    catch (int i)
    {
        switch (i)
        {
            case 1:
                cout<<"Ошибка! Отрицательное значения количества элементов массива.\n";
            case 2:
                cout<<"Ошибка! Минимальное значение больше максимального.\n";
            case 3:
                cout<<"Ошибка! Слишком большое максимальное значение.\n";
            case 4:
                cout<<"Ошибка! Слишком маленькое минимальное значение.\n";
        }
    }
 
    system("pause");
}
 
void bubbleSort(int *arrPtr, int lenght_array)
{
    int x;
    bool exit = false;
 
    while (!exit)
    {
        exit = true;
        for (int int_counter=0; int_counter<(lenght_array-1); int_counter++)
        {
            if (arrPtr[int_counter]>arrPtr[int_counter+1])
            {
                x = arrPtr[int_counter];
                arrPtr[int_counter] = arrPtr[int_counter+1];
                arrPtr[int_counter+1] = x;
                exit = false;
            }
        }
    }
 
    cout<<"Отсортированный массив:\n";
 
    for (int counter=0; counter<lenght_array; counter++)
    {
        cout<<setw(2)<<arrPtr[counter]<<" ";
    }
    cout<<"\n";
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2014, 17:08     Почему выводятся все ошибки, а не одна?
Посмотрите здесь:

Почему при проверке заполнения массива выводятся неправильные значения? C++
C++ Файловый ввод-вывод: выводятся не все символы, не читается кириллица
C++ Не выводятся все числа Армстронга
C++ Почему не выводятся фамилия и книга?
Почему после 51-го знака после запятой выводятся одни нули? C++
C++ Почему при записи в файл не выводятся четные строки?
Почему после передачи в функцию массива, выводятся случайные числа, если использовать *(uk++) во второй раз? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6783 / 3994 / 916
Регистрация: 30.01.2014
Сообщений: 6,812
19.11.2014, 17:12     Почему выводятся все ошибки, а не одна? #2
Sony D, потому что нужно ставить break`и.
nmcf
4441 / 3779 / 1278
Регистрация: 14.04.2014
Сообщений: 14,872
19.11.2014, 17:12     Почему выводятся все ошибки, а не одна? #3
Потому что ты break'и не поставил.
mss307
118 / 118 / 25
Регистрация: 14.12.2013
Сообщений: 352
19.11.2014, 17:16     Почему выводятся все ошибки, а не одна? #4
если вдруг не понятно..
C++
1
2
3
case 1: 
cout<<"Ошибка! Отрицательное значения количества элементов массива.\n";
break;
и так должно быть с каждым case
Sony D
0 / 0 / 0
Регистрация: 27.09.2014
Сообщений: 8
19.11.2014, 17:20  [ТС]     Почему выводятся все ошибки, а не одна? #5
Так работает правильно.
Но, в этой программе и без break сразу выдает ошибку, и правильную
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
#include <iostream>
#include <math.h>
 
using namespace std;
 
double calc(double a, double b, double c, double d){
    double y;
    y=sqrt(abs(sin(a)-(4*log(b)/pow(c, d))));
    return y;
}
 
int main(){
    setlocale(LC_ALL, "Russian");
    double a, b, c, d;
    try {
        cout<<"Введите значения a, b, c, d:"<<endl;
        cin>>a>>b>>c>>d;
        if (b<=0)
            throw 1;
        if (c==0)
            throw 2;
    double res = calc(a, b, c, d);
    cout<<"Значения выражения равняется: "<<res<<"\n";
    system("pause");
    return 0;
 
    }
    catch (int i)
    {
        switch(i)
        {
            case 1:
                cout<<"Ошибка! Под логарифмом не может быть отрицательное число.\n";
            case 2:
                cout<<"Ошибка! При c=0 знаменатель будет равняться нулю.\n";
        }
    }
    system("pause");
}
nmcf
4441 / 3779 / 1278
Регистрация: 14.04.2014
Сообщений: 14,872
19.11.2014, 17:25     Почему выводятся все ошибки, а не одна? #6
По case 2? Ну так он последний, ему break не нужен.
mss307
118 / 118 / 25
Регистрация: 14.12.2013
Сообщений: 352
19.11.2014, 17:33     Почему выводятся все ошибки, а не одна? #7
Sony D, case проверяются последовательно. управление передается в подходящий case, после чего идет последовательное выполнение инструкций до break или окончания блока switch (до того, что раньше).
если подходит последний case и после него нет default, то внешне все будет нормально и без break, но это все равно плохо.
Sony D
0 / 0 / 0
Регистрация: 27.09.2014
Сообщений: 8
19.11.2014, 17:42  [ТС]     Почему выводятся все ошибки, а не одна? #8
Ошибку понял. Спасибо!)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2014, 18:20     Почему выводятся все ошибки, а не одна?
Еще ссылки по теме:

C++ в чем разница между этими записями, и почему одна не работает
C++ Почему не выводятся данные родительского класса
Пользовательский класс Library: почему не выводятся значения полей класса? C++
C++ Почему повторяющиеся символы заданной строки не выводятся на консоль? (алгоритм std::adjacent_find)
Неожиданное поведение программы: почему на консоль не выводятся крайние значения заданного диапазона? C++

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

Или воспользуйтесь поиском по форуму:
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1928 / 1724 / 600
Регистрация: 14.05.2014
Сообщений: 4,994
Записей в блоге: 1
Завершенные тесты: 5
19.11.2014, 18:20     Почему выводятся все ошибки, а не одна? #9
Sony D,
Цитата Сообщение от Sony D Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
if (max>2147483647)
{
    throw 3;
}
if (min<-2147483648)
{
    throw 4;
}
Разность максимального и минимального значений не должна превышать 32767, т.к. у rand() максимальный разброс чисел от 0 до 32767. Если она будет больше, то будут выдаваться значения от min до (min + 32767).
Yandex
Объявления
19.11.2014, 18:20     Почему выводятся все ошибки, а не одна?
Ответ Создать тему
Опции темы

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