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

Ошибка в case - C++

Восстановить пароль Регистрация
 
student-novi4ok
4 / 4 / 1
Регистрация: 05.09.2011
Сообщений: 113
12.11.2011, 15:49     Ошибка в case #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
#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
#include <system.hpp>
int vvod();
int vivod(int n1, int s1);
int obrab(int n1);
int *p;
int i;
int main()
{
 clrscr();
 int c;
 for(;;){
 rus("   Menu    ");
 rus("1) Vvod massiva");
 rus("2) Vivod u obrabotka");
 rus("3) Удаление массива ");
 cin>>c;
 switch (c)
 {
 case 1: int n1=vvod(); break;
 case 2: vivod(n1,obrab(n1)); break;
 case 3:  delete (p);
 default:rus("Net takoy komandi ");break;
 };
 }
 getch();
 return(0);
}
int vvod()
{
int n1;
rus("Kol-vo alementov"); cin>>n1;
p=new int [n1];
rus("Alementi massiva: ");
for(i=0;i<n1;i++)
cin>>p[i];
return(n1);
}
int obrab(int n1)
{int s=0;
 for(i=0;p[i]&&(i<=n1);i++);
 while(i<n1) s+=*(p+i++);
 return(s);
}
int vivod(int n1, int s)
{rus("Vvivod massiva");
for(i=0;i<n1;i++)
cout<<setw(3)<<*(p+i);
cout<<endl<<"s = "<<s<<endl;
return(0);
}
Осваиваю функции, программа смысла не имеет) просто возникла проблема откуда и не ждал,
вот код ошибки [C++ Error] Unit1.cpp(29): E2126 Case bypasses initialization of a local variable
ни как не могу понять в чем дело.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
amor1k
Студент
 Аватар для amor1k
147 / 147 / 24
Регистрация: 18.01.2011
Сообщений: 469
12.11.2011, 15:52     Ошибка в case #2
C++
1
 case 1: int n1=vvod(); break;
объявите переменную n1 в начале main
student-novi4ok
4 / 4 / 1
Регистрация: 05.09.2011
Сообщений: 113
12.11.2011, 15:58  [ТС]     Ошибка в case #3
Программа запустилась, но только введенный массив не передается в функцию обработки
amor1k
Студент
 Аватар для amor1k
147 / 147 / 24
Регистрация: 18.01.2011
Сообщений: 469
12.11.2011, 16:03     Ошибка в case #4
ну конечно, ведь вы передаете функции vvod() значение количества элементов, а не сам массив.
Я с указателями не сильно дружу но можете попробывать так
C++
1
2
3
4
5
6
7
8
9
10
int *vvod()
{
int n1;
rus("Kol-vo alementov"); cin>>n1;
p=new int [n1];
rus("Alementi massiva: ");
for(i=0;i<n1;i++)
cin>>p[i];
return p;
}
student-novi4ok
4 / 4 / 1
Регистрация: 05.09.2011
Сообщений: 113
12.11.2011, 16:08  [ТС]     Ошибка в case #5
К сожалению не помогло, я как бы тоже думал что массив надо тоже передавать, но с параметрами пока тоже не сильно дружу, а с указателями тем более)
amor1k
Студент
 Аватар для amor1k
147 / 147 / 24
Регистрация: 18.01.2011
Сообщений: 469
12.11.2011, 16:09     Ошибка в case #6
щас нормальную дам прогу
student-novi4ok
4 / 4 / 1
Регистрация: 05.09.2011
Сообщений: 113
12.11.2011, 16:14  [ТС]     Ошибка в case #7
спасибо, буду ждать
amor1k
Студент
 Аватар для amor1k
147 / 147 / 24
Регистрация: 18.01.2011
Сообщений: 469
12.11.2011, 16:20     Ошибка в case #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
#include <iostream>
#include <conio.h>
#include <iomanip>
using namespace std;
int *vvod(int *mass, int n1);
void vivod(int *mass, int n1, int s1);
int obrab(int *mass, int n1);
int main()
{
    setlocale(0,"");
    int n1;
    int *p;
    int c;
    for(;;){
        system("cls");
        cout << "Меню: " << endl;
        cout << "1. Ввод массива" << endl;
        cout << "2. Обработчик массива " << endl;
        cout << "3. Вывод массива " << endl;
        cout << "4. Выход " << endl;
        cin>>c;
        switch (c)
        {
        case 1: 
            cout << "Введите кол-во элементов: "; cin >> n1;
            p = new int [n1];
            vvod(p, n1); break;
        case 2: 
            obrab(p,n1); break;
        case 3: 
            vivod(p,n1,obrab(p,n1)); 
            _getch();
            break;
        case 4:
            delete p;
            return 0;
        }
    }
    _getch();
    return 0;
}
int *vvod(int *mass, int n1)
{
    cout << "Элементы массива: \n";
    for(int i=0; i < n1; i++)
        cin>>mass[i];
    return mass;
}
int obrab(int *mass, int n1)
{
    int s=0;
    for(int i = 0; i < n1; i++)
        s += mass[i];
    return s;
}
void vivod(int *mass, int n1, int s)
{
    cout << "Вывод массива: ";
    for(int i=0;i<n1;i++)
        cout << setw(3) << mass[i];
    cout << endl << "s = "<<s<<endl;
 
}
student-novi4ok
4 / 4 / 1
Регистрация: 05.09.2011
Сообщений: 113
12.11.2011, 16:28  [ТС]     Ошибка в case #9
вопрос немного не в тему, но можете подсказать как переставить язык консоли???

Добавлено через 3 минуты
int *vvod(int *mass, int n1);
что означает * около vvod???
amor1k
Студент
 Аватар для amor1k
147 / 147 / 24
Регистрация: 18.01.2011
Сообщений: 469
12.11.2011, 16:31     Ошибка в case #10
в функцию передается одномерный массив и кол-во элементов.
можете так если проще
C++
1
int *vvod(int mass[], int n1);
student-novi4ok
4 / 4 / 1
Регистрация: 05.09.2011
Сообщений: 113
12.11.2011, 16:36  [ТС]     Ошибка в case #11
да не указатели я понимаю, а вот почему стоит * перед vvod, я никак не могу понять на счет int mass* я понял
amor1k
Студент
 Аватар для amor1k
147 / 147 / 24
Регистрация: 18.01.2011
Сообщений: 469
12.11.2011, 16:43     Ошибка в case #12
функция возращает массив
student-novi4ok
4 / 4 / 1
Регистрация: 05.09.2011
Сообщений: 113
12.11.2011, 17:01  [ТС]     Ошибка в case #13
Огромное вам спасибо, теперь надо немного её переделать под мои условия.

Добавлено через 2 минуты
так можете подсказать как поменять язык консоли?
amor1k
Студент
 Аватар для amor1k
147 / 147 / 24
Регистрация: 18.01.2011
Сообщений: 469
12.11.2011, 18:21     Ошибка в case #14
незнаю...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.11.2011, 18:26     Ошибка в case
Еще ссылки по теме:

case outside of switch ? Что за ошибка? C++
C++ Ошибка с case
C++ Ошибка в switch case: expected primary-expression before '<=' token;

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

Или воспользуйтесь поиском по форуму:
student-novi4ok
4 / 4 / 1
Регистрация: 05.09.2011
Сообщений: 113
12.11.2011, 18:26  [ТС]     Ошибка в case #15
Да я уж нашел, если кому поможет вот:
Tools->Editor Options...->Вкладка "Display"-> Чекбокс "Editor font"->Выбираем шрифт
Yandex
Объявления
12.11.2011, 18:26     Ошибка в case
Ответ Создать тему
Опции темы

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