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

Внутри switch ошибка Case bypasses initialization of a local variable

02.06.2015, 03:42. Показов 10746. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Компилятор не устраивает case 3, там ввод массива автоматически , в чем ошибка подскажите
Ошибку пишет Case bypasses initialization of a local variable
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
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
#include <iostream.h>
#include <math.h>
#include <stdlib.h>
#include <iomanip.h>
#include <stdio.h>
#include <values.h>
 
int main()
{
    double m [100];
    int ke, i, koe = 0, n_min = 0, min, summa = 0, ykaz = 1;
    while (ykaz > 0)
        randomize();
    {
        cout<<"Укажите действие, которое необходимо сделать с массивом:"<<"\n"<<"1 - Заполнить массив в ручную. "<<endl;
                cout<<"2 - заполниь массив в автоматическом режиме."<<endl;
        cout<<"3 - количество отрицательных элементов. "<<endl;
        cout<<"4 - сумма модулей элементов после минимального по модулю. "<<endl;
        cout<<"5 - замена отрицательных элементов их квадратами. "<<endl;
                cout<<"0 - выход."<<endl;
                cin>>ykaz;
        switch(ykaz)
        {
            case 1:
                cout <<"Введите размер массива: ";
                cin >> ke;
                cout<<endl;
                for ( i = 0; i < ke; i++)
                {
                    cout << " m [" << i << "] = ";
                    cin >> m [i];
                }
                cout<<"\n======================================================\n";
                break;
            case 2:
                cout<<"Введите размер массива : ";
                cin>>ke;
                for (int i=0; i<ke; i++)
                                  {
                    m[i] = random(100) + 1;
                    cout<<"m["<<i<<"] = ";
                                   }
                cout<<"\n======================================================\n";
            case 3:            
 
                for ( i=0; i<ke; i++)
                    if (m[i]<0) 
                        koe++;
                        
                cout<<"Количество отрицательных элементов массива : "<<koe<<".\n";
                cout<<"\n======================================================\n";
                break;
            case 4:
                n_min = 0;
                for ( i=0; i<ke; i++) 
                if (fabs(m[i]) < fabs(m[n_min]))
                    n_min=i;
                if (n_min==ke-1)
                    cout<<"Минимальный по модулю элемент последний.\n";
                else
                {
                    for ( i=(n_min+1); i<ke; i++) 
                    summa+=fabs(m[i]);
                    cout<<"Сумма модулей элементов после минимального по модулю : "<<summa<<".\n";
                }
                cout<<"\n======================================================\n";
                break;
            case 5:
                for (i=0; i<ke; i++)
                    if (m[i]<0) 
                        m[i]=pow(m[i],2);
                    cout<<"Замена отрицательных элементов их квадратами:\n";
                for (i = 0; i < ke; i ++)
                    cout<<m[i]<<" ";
                cout<<"\n======================================================\n";
                break;
            case 6:
                double k;
            for ( i=0; i<(ke-1); i++) 
            {
                for (int j=i+1; j<ke; j++)
                {
                    if (m[i] > m[j])
                    {
                        k=m[i];
                        m[i]=m[j];
                        m[j]=k;
                    }
                }
            }
            cout<<"Отсортированный массив:\n";
            for ( i=0; i<ke; i++)
                cout << m[i] << ' ';
            cout<<"\n======================================================\n";
                break;
            default:
                            ykaz = 0;
                            break;
                }
    }
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.06.2015, 03:42
Ответы с готовыми решениями:

Ошибка E2203 Goto bypasses initialization of a local variable
Есть код программы ...

Ошибка For loop control variable must be simple local variable
Добра всем! Ошибка, указанная в топике темы, возникает в таком контексте: function ParseMath...

Ошибка: For loop control variable must be simple local variable
Добрый день , дело вот в чем , написал я процедурку : procedure TForm1.DrawClock; var ...

Switch case внутри switch case
Привет всем! Нужна помощь. Пишу калькулятор с консольным меню. Так вот, используется цикл...

9
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
02.06.2015, 04:31 2
Типичный г*код. Какое значение имеет 'ke' в случае case 3?
0
0 / 0 / 0
Регистрация: 27.05.2015
Сообщений: 41
02.06.2015, 05:02  [ТС] 3
То которое мы вводим,можете показать как это должно выглядеть

Добавлено через 23 минуты
Я студент, язык очень плохо знаю
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
02.06.2015, 09:26 4
Когда не написано, на какой строке исходника компилятор выдаёт ошибку, то слишком сложно догадаться (именно догадаться, а не говорить предметно), о чём идёт речь. Скорее всего "double k;" нужно удалить после "case 6" и перенести его в начало функции (вместе с остальными переменными)
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
02.06.2015, 09:29 5
Vanko, Возьмите себе за правило,
если объявляете новые переменные внутри case,то заключайте этот кусок кода в фигурные скобки.
2
шКодер самоучка
2227 / 1921 / 927
Регистрация: 09.10.2013
Сообщений: 4,260
Записей в блоге: 7
02.06.2015, 09:33 6
еще посмотрите на строки 12-13 - этот цикл никогда не завершится...
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
02.06.2015, 09:34 7
Цитата Сообщение от zss Посмотреть сообщение
если объявляете новые переменные внутри case,то заключайте этот кусок кода в фигурные скобки.
и знаете почему так?)
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
02.06.2015, 10:45 8
Кстати, это довольно распространённая ошибка.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
    int i = 2;
    switch ( i ) {
        case 1:
            int j = 123;
            break;
 
        case 2:
            break;
    }
    return 0;
}

Кликните здесь для просмотра всего текста
GCC
Bash
1
2
3
4
5
6
7
8
9
main.cpp: In function 'int main()':
main.cpp:9:8: error: jump to case label [-fpermissive]
   case 2:
        ^
main.cpp:6:8: error:   crosses initialization of 'int j'
    int j = 123;
        ^
main.cpp:6:8: warning: unused variable 'j' [-Wunused-variable]
mingw32-make: *** [main.o] Error 1



Кликните здесь для просмотра всего текста
clang
Bash
1
2
3
4
5
6
7
8
9
10
11
main.cpp:6:8: warning: unused variable 'j' [-Wunused-variable]
                        int j = 123;
                            ^
main.cpp:9:3: error: cannot jump from switch statement to this case label
                case 2:
                ^
main.cpp:6:8: note: jump bypasses variable initialization
                        int j = 123;
                            ^
1 warning and 1 error generated.
mingw32-make: *** [main.o] Error 1


При i == 2 произойдёт обход инициализации j.

Можно добавить в Распространённые ошибки если её там нет.
1
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
02.06.2015, 10:58 9
Цитата Сообщение от castaway Посмотреть сообщение
При i == 2 произойдёт обход инициализации j.
Да и шут с ней. В чем хохма?
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
02.06.2015, 11:03 10
Цитата Сообщение от SatanaXIII Посмотреть сообщение
В чем хохма?
Это не хохма, это ошибка. Код не скомпилируется.
0
02.06.2015, 11:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.06.2015, 11:03
Помогаю со студенческими работами здесь

Ошибка: "For loop control variable must be simple local variable"
unit Unit3; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics,...

Ошибка: "For loop control variable must be simple local variable"
Мне показывает вот такую ошибку For loop control variable must be simple local variable в таком...

Ошибка: "for loop control variable must be simple local variable"
как избежать эту ошибку, если массив динамический? procedure TForm1.Button3Click(Sender:...

Ошибка "For loop control variable must be simple local variable"
Товарищи,по какой причине в заданной функции невозможно деление, при умножении программа работает,...

Ошибка initialization of 'element' is skipped by 'case' label
Во первый заранее извиняюсь если не правильно создал тему, я здесь впервые и не знаю как выбрать...

Ошибка: error C2360: initialization of 'mat_C' is skipped by 'case' label
Выдаёт такие ошибки: 1&gt;c:\users\данила\documents\visual studio...


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

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