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

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

Войти
Регистрация
Восстановить пароль
 
Sony D
0 / 0 / 0
Регистрация: 27.09.2014
Сообщений: 8
#1

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

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

Почему не выводятся фамилия и книга? - C++
ОЧЕНЬ СРОЧНО!! Подскажите пожалуйста почему не выводятся фамилия и книга??! Файл содержит данные о выдаче книг в библиотеке: фамилия...

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

Почему при записи в файл не выводятся четные строки? - C++
#include &lt;iostream&gt; #include &lt;cctype&gt; #include &lt;fstream&gt; #include &lt;cstdlib&gt; #include &lt;cstring&gt; using namespace std; int...

Почему при проверке заполнения массива выводятся неправильные значения? - C++
// ConsoleApplication15.cpp: определяет точку входа для консольного приложения. // #include &quot;stdafx.h&quot; #include &lt;iostream&gt; ...

Пользовательский класс Library: почему не выводятся значения полей класса? - C++
я создала класс Библиотека (название – char* автор – char* стоимость – float) У меня не выводит название, автора и стоимость. В чём моя...

Почему повторяющиеся символы заданной строки не выводятся на консоль? (алгоритм std::adjacent_find) - C++
Никак не могу взять в толк, почему повторяющиеся символы не выводятся на консоль? #include &lt;iostream&gt; #include &lt;string&gt; #include...

8
DrOffset
7376 / 4453 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
19.11.2014, 17:12 #2
Sony D, потому что нужно ставить break`и.
0
nmcf
5532 / 4842 / 1641
Регистрация: 14.04.2014
Сообщений: 19,644
19.11.2014, 17:12 #3
Потому что ты break'и не поставил.
0
mss307
118 / 118 / 25
Регистрация: 14.12.2013
Сообщений: 352
19.11.2014, 17:16 #4
если вдруг не понятно..
C++
1
2
3
case 1: 
cout<<"Ошибка! Отрицательное значения количества элементов массива.\n";
break;
и так должно быть с каждым case
1
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");
}
0
nmcf
5532 / 4842 / 1641
Регистрация: 14.04.2014
Сообщений: 19,644
19.11.2014, 17:25 #6
По case 2? Ну так он последний, ему break не нужен.
0
mss307
118 / 118 / 25
Регистрация: 14.12.2013
Сообщений: 352
19.11.2014, 17:33 #7
Sony D, case проверяются последовательно. управление передается в подходящий case, после чего идет последовательное выполнение инструкций до break или окончания блока switch (до того, что раньше).
если подходит последний case и после него нет default, то внешне все будет нормально и без break, но это все равно плохо.
1
Sony D
0 / 0 / 0
Регистрация: 27.09.2014
Сообщений: 8
19.11.2014, 17:42  [ТС] #8
Ошибку понял. Спасибо!)
0
Kerry_Jr
Модератор
Эксперт PHP
2206 / 2002 / 701
Регистрация: 14.05.2014
Сообщений: 5,867
Записей в блоге: 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).
0
19.11.2014, 18:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2014, 18:20
Привет! Вот еще темы с ответами:

Неожиданное поведение программы: почему на консоль не выводятся крайние значения заданного диапазона? - C++
Помогите, пожалуйста, наити ошибку!? Не выводится крайнее значение, то есть если брать от -2 до 3х, то нету х=3 и соответственно у. И ещё...

Почему после передачи в функцию массива, выводятся случайные числа, если использовать *(uk++) во второй раз? - C++
Интересует такой вопрос: почему после передачи в функцию массива выводятся случайные числа из оперативной памяти, если использовать *(uk++)...

Не выводятся все числа Армстронга - C++
Нужно вывести 4-хзначные числа Армстронга. Одно дает, другое не правильное. Должно получиться 1634, 8208, 9474 Подскажите в чем проблема....

в чем разница между этими записями, и почему одна не работает - C++
box2d, я написал вот так: world-&gt;Step(1 / 60, 8, 2); и физика не работала, не мог понять почему, потом просто скопировал вот этот код: ...


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

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

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