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

Ошибка при определении переменной в switch - C++

Восстановить пароль Регистрация
 
wismbel
0 / 0 / 0
Регистрация: 20.09.2015
Сообщений: 103
01.10.2015, 22:03     Ошибка при определении переменной в switch #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
case 2: // почасовые работники - фиксированная плата за 40ч, после 40ч полуторная ставка
    
        int workingNorm = 40;
        int hours;
        rate = 1.5; // ставка за сверхурочные часы
 
        cout << "Enter the salary for hour: ";
        cin >> salary;
 
        cout << "Enter the number of hours: ";
        cin >> hours;
 
        if (salary <= workingNorm)
            total = salary * hours;
        else
            total = salary * rate * (hours - workingNorm) + (salary * workingNorm);
 
        cout << "Salary: " << total << "$\n";
        break;
 
    case 3: // на комиссионных началах - 250$ плюс 5.7 % от суммы недельных продаж 
        int product;
        double cost;
        rate = 5.7; // %
 
        cout << "Enter how much of product were sold: ";
        cin >> product;
 
        cout << "Enter the cost of product: ";
        cin >> cost;
 
        salary = 250;
 
        total = salary + (product * (cost * rate / 100));
 
        cout << "Salary: " << total << "$\n";
        break;
Студия ругается. Говорит: error C2360: initialization of 'workingNorm' is skipped by 'case' label c:\users\dmitr_000\documents\visual studio 2013\projects\p5ex5p21\p5ex5p21\source.cpp 56 1 p5ex5p21

Загуглил. Если тело первого случая загнать в скобки - всё окей.
Но почему всё нормально во втором случае? ( скобок нет )

P.s. каких их называть? случаи или кейсы?
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
_Valera_
 Аватар для _Valera_
486 / 368 / 94
Регистрация: 27.01.2015
Сообщений: 1,588
01.10.2015, 22:06     Ошибка при определении переменной в switch #2
Цитата Сообщение от wismbel Посмотреть сообщение
Если тело первого случая загнать в скобки - всё окей.
имено по этому ты скинул жалкий огрызок кода? Начиная со второго пункта.!
wismbel
0 / 0 / 0
Регистрация: 20.09.2015
Сообщений: 103
01.10.2015, 22:07  [ТС]     Ошибка при определении переменной в switch #3
Цитата Сообщение от _Valera_ Посмотреть сообщение
имено по этому ты скинул жалкий огрызок кода?
Думал, что этого хватит.
Кликните здесь для просмотра всего текста
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
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
 
#include <iomanip>
 
int main()
{
    int type;
    int week = 7;  // 7 days
    double total = 0;
    double salary = 0;
    double rate;
 
    do
    {
        cout << "Hello, clerk. Enter the code of employee: ";
        cin >> type;
 
    } while (type < 1 && type > 4);
 
    cout << std::setprecision(2) << std::fixed;
 
    switch (type)
    {
    case 1: // менеджеры - фиксированный недельный оклад
        cout << "Enter the day's salary: ";
        cin >> salary;
 
        total = salary * week;
 
        cout << "Salary: " << total << "$\n";
        break;
 
    case 2: // почасовые работники - фиксированная плата за 40ч, после 40ч полуторная ставка
    {
        int workingNorm = 40;
        int hours;
        rate = 1.5; // ставка за сверхурочные часы
 
        cout << "Enter the salary for hour: ";
        cin >> salary;
 
        cout << "Enter the number of hours: ";
        cin >> hours;
 
        if (salary <= workingNorm)
            total = salary * hours;
        else
            total = salary * rate * (hours - workingNorm) + (salary * workingNorm);
 
        cout << "Salary: " << total << "$\n";
        break;
    }
    case 3: // на комиссионных началах - 250$ плюс 5.7 % от суммы недельных продаж 
        int product;
        double cost;
        rate = 5.7; // %
 
        cout << "Enter how much of product were sold: ";
        cin >> product;
 
        cout << "Enter the cost of product: ";
        cin >> cost;
 
        salary = 250;
 
        total = salary + (product * (cost * rate / 100));
 
        cout << "Salary: " << total << "$\n";
        break;
 
    case 4: // сдельщики - фиксированная сумма с проданной продукции(только один продукт)
        cout << "Enter how much of product were sold: ";
        cin >> product;
 
        cout << "Enter the cost of product: ";
        cin >> cost;
 
        total = product * cost;
 
        cout << "Salary: " << total << "$\n";
        break;
    }
    system("pause");
    return 0;
}
_Valera_
 Аватар для _Valera_
486 / 368 / 94
Регистрация: 27.01.2015
Сообщений: 1,588
01.10.2015, 22:10     Ошибка при определении переменной в switch #4
у меня все работает,
wismbel
0 / 0 / 0
Регистрация: 20.09.2015
Сообщений: 103
01.10.2015, 22:11  [ТС]     Ошибка при определении переменной в switch #5
Цитата Сообщение от _Valera_ Посмотреть сообщение
...
Странно.
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1855 / 1651 / 574
Регистрация: 14.05.2014
Сообщений: 4,726
Записей в блоге: 1
Завершенные тесты: 5
01.10.2015, 22:15     Ошибка при определении переменной в switch #6
wismbel, для того, чтобы объявлять переменные внутри кейсов, тело кейсов нужно обрамлять фигурными скобками, именно поэтому у Вас все и заработало.
_Valera_
 Аватар для _Valera_
486 / 368 / 94
Регистрация: 27.01.2015
Сообщений: 1,588
01.10.2015, 22:15     Ошибка при определении переменной в switch #7
...
wismbel
0 / 0 / 0
Регистрация: 20.09.2015
Сообщений: 103
01.10.2015, 22:17  [ТС]     Ошибка при определении переменной в switch #8
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
для того, чтобы объявлять переменные внутри кейсов, тело кейсов нужно обрамлять фигурными скобками, именно поэтому у Вас все и заработало.
А почему во втором кейсе всё нормально?

Добавлено через 29 секунд
case 3
_Valera_
 Аватар для _Valera_
486 / 368 / 94
Регистрация: 27.01.2015
Сообщений: 1,588
01.10.2015, 22:18     Ошибка при определении переменной в switch #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
wismbel, для того, чтобы объявлять переменные внутри кейсов, тело кейсов нужно обрамлять фигурными скобками, именно поэтому у Вас все и заработало.
то есть нельзя инициализировать ???
Потому что так работает
C++
1
2
3
4
5
 case 2: // почасовые работники - фиксированная плата за 40ч, после 40ч полуторная ставка
        int workingNorm;
        int hours;
        workingNorm = 40;
      ... тот же код...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.10.2015, 22:19     Ошибка при определении переменной в switch
Еще ссылки по теме:

C++ Синтаксическая ошибка при определении массива
C++ Ошибка в определении стандартной API функции
C++ Ошибка при определении макроса

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

Или воспользуйтесь поиском по форуму:
wismbel
0 / 0 / 0
Регистрация: 20.09.2015
Сообщений: 103
01.10.2015, 22:19  [ТС]     Ошибка при определении переменной в switch #10
Цитата Сообщение от _Valera_ Посмотреть сообщение
то есть нельзя инициализировать ???
Да, наверное так.
Yandex
Объявления
01.10.2015, 22:19     Ошибка при определении переменной в switch
Ответ Создать тему
Опции темы

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