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

Не понятна причина ошибки - C++

Восстановить пароль Регистрация
 
Fafle
 Аватар для Fafle
34 / 34 / 4
Регистрация: 19.03.2010
Сообщений: 136
05.04.2011, 13:12     Не понятна причина ошибки #1
Есть задание :
Написать программу, которая осуществляет добавление строки или столбца в любое место двумерной матрицы по выбору пользователя.

Вроде все норм, но вылазит ошибка

main.cpp:55: error: jump to case label
main.cpp:32: error: crosses initialization of ‘int** arnew1’

Может я чего не понимаю?
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() {
    int size;
    int Case;
    int number;
    cout << "Введите размер изначальной матрици\n";
    cin >> size;
 
    int *New = new int[size];
    for (int i = 0; i < size; i++)
        New[i] = 2;
 
    int **ar = new int*[size];
    for (int i = 0; i < size; i++)
        ar[i] = new int[size];
 
    for (int row = 0; row < size; row++) {
        for (int col = 0; col < size; col++) {
            ar[row][col] = 1;
            cout << ar[row][col] << " ";
        }
        cout << endl;
    }
    cout << "Если хотите добавить строку введите 1, если столбец 2\n";
    cin >> Case;
    switch (Case) {
        case 1:
            cout << "Введите номер новой строки\n";
            cin >> number;
            int **arnew1 = new int*[size + 1];
            for (int i = 0; i < size + 1; i++)
                arnew1[i] = new int[size];
            for (int row = 0; row < size + 1; row++) {
                for (int col = 0; col < size; col++) {
                    if (row == number - 1)
                        arnew1[row][col] = New[col];
                    else if (row < number - 1)
                        arnew1[row][col] = ar[row][col];
                    else
                        arnew1[row][col] = ar[row - 1][col];
                }
            }
 
            cout << endl;
 
            for (int row = 0; row < size + 1; row++) {
                for (int col = 0; col < size; col++) {
                    cout << arnew1[row][col] << " ";
                }
                cout << endl;
            }
            break;
        case 2:
            cout << "Введите номер нового столбца\n";
            cin >> number;
            int **arnew2 = new int*[size];
            for (int i = 0; i < size; i++)
                arnew2[i] = new int[size + 1];
            for (int row = 0; row < size; row++) {
                for (int col = 0; col < size + 1; col++) {
                    if (col == number - 1)
                        arnew2[row][col] = New[row];
                    else if (col < number - 1)
                        arnew2[row][col] = ar[row][col];
                    else
                        arnew2[row][col] = ar[row][col - 1];
                }
            }
 
 
            cout << endl;
 
            for (int row = 0; row < size; row++) {
                for (int col = 0; col < size + 1; col++) {
                    cout << arnew2[row][col] << " ";
                }
                cout << endl;
            }
            break;
    }
    for (int i = 0; i < size; i++)
        delete[] ar[i];
    delete [] ar;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.04.2011, 13:12     Не понятна причина ошибки
Посмотрите здесь:

C++ причина ошибки
В чем причина ошибки? C++
В чем причина? C++
C++ В чем причина
C++ В чем причина
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Attenti_ON
9 / 9 / 1
Регистрация: 17.11.2009
Сообщений: 51
05.04.2011, 13:46     Не понятна причина ошибки #2
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
#include <iostream>
using namespace std;
 
int main()
{
    int size;
    int Case;
    int number;
    cout << "Введите размер изначальной матрици\n";
    cin >> size;
 
    int *New = new int[size];
    for (int i = 0; i < size; i++)
        New[i] = 2;
 
    int **ar = new int*[size];
    for (int i = 0; i < size; i++)
        ar[i] = new int[size];
 
    for (int row = 0; row < size; row++) 
    {
        for (int col = 0; col < size; col++) 
        {
            ar[row][col] = 1;
            cout << ar[row][col] << " ";
        }
        cout << endl;
    }
    
    cout << "Если хотите добавить строку введите 1, если столбец 2\n";
    cin >> Case;
    
    switch (Case) 
    {
        case 1:
        {
            cout << "Введите номер новой строки\n";
            cin >> number;
            int **arnew1 = new int*[size + 1];
            for (int i = 0; i < size + 1; i++)
                arnew1[i] = new int[size];
            for (int row = 0; row < size + 1; row++) 
            {
                for (int col = 0; col < size; col++) 
                {
                    if (row == number - 1)
                        arnew1[row][col] = New[col];
                    else if (row < number - 1)
                        arnew1[row][col] = ar[row][col];
                    else
                        arnew1[row][col] = ar[row - 1][col];
                }
            }
 
            cout << endl;
 
            for (int row = 0; row < size + 1; row++) 
            {
                for (int col = 0; col < size; col++) 
                {
                    cout << arnew1[row][col] << " ";
                }
                cout << endl;
            }
            break;
        }
        case 2:
        {
            cout << "Введите номер нового столбца\n";
            cin >> number;
            int **arnew2 = new int*[size];
            for (int i = 0; i < size; i++)
                arnew2[i] = new int[size + 1];
            for (int row = 0; row < size; row++) 
            {
                for (int col = 0; col < size + 1; col++) 
                {
                    if (col == number - 1)
                        arnew2[row][col] = New[row];
                    else if (col < number - 1)
                        arnew2[row][col] = ar[row][col];
                    else
                        arnew2[row][col] = ar[row][col - 1];
                }
            }
 
 
            cout << endl;
 
            for (int row = 0; row < size; row++) 
            {
                for (int col = 0; col < size + 1; col++) 
                {
                    cout << arnew2[row][col] << " ";
                }
                cout << endl;
            }
            break;
        }
    }
    
    for (int i = 0; i < size; i++)
        delete[] ar[i];
    delete [] ar;
    return 0;
}
вот так не выдает ошибок. Там скобок немного не хватало
Fafle
 Аватар для Fafle
34 / 34 / 4
Регистрация: 19.03.2010
Сообщений: 136
05.04.2011, 14:01  [ТС]     Не понятна причина ошибки #3
Аа, фак, в кэйсах, спс
prZzZ
Программист
 Аватар для prZzZ
108 / 88 / 5
Регистрация: 22.03.2011
Сообщений: 232
05.04.2011, 14:03     Не понятна причина ошибки #4
1. Дело в том, что вы определяете локальные переменные в блоке case, а это запрещено - обход инициализации.
Рекомендации: Определяйте переменные либо выше switch, либо создайте искусственную область видимости из {скобок}.

2. Вы нигде не освобождаете память из под массивов arnew1 и arnew2.
Yandex
Объявления
05.04.2011, 14:03     Не понятна причина ошибки
Ответ Создать тему
Опции темы

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