не понимаю ошибку в switch
Здраствуйте! Перехожу с C# на C++ и столкнулся с проблемой:
#include <iostream>
char chooseSimbol() {
char s;
std::cout << "\n\n\tВыберите символ, которым будет рисоваться линия: ";
std::cin >> s;
system("cls");
return s;
}
int chooseLineLength() {
int lineLength;
std::cout << "\n\n\tВведите длину линию: ";
std::cin >> lineLength;
system("cls");
return lineLength;
}
int main()
{
setlocale(LC_ALL, "ru");
std::cout << "\n\n\n\t\t\t\t\tРисовальщик линии \n\n\n";
std::cout << "\n\tКакую линию вы будете рисовать?"
<< "\n\t[1] - Горизонтальную"
<< "\n\t[2] - Вертикальную"
<< "\n\n\t\t> ";
int menuA;
std::cin >> menuA;
system("cls");
switch (menuA)
{
case 1:
char s = chooseSimbol();
int a = chooseLineLength();
for (int i = 0; i < a; i++) {
std::cout << s;
}
break;
case 2:
char s = chooseSimbol();
int a = chooseLineLength();
for (int i = 0; i < a; i++) {
std::cout << s << "\n";
}
break;
}
}
Данный код выдаёт ошибки:
- a: переопределение; множественная инициализация
- s: переопределение; множественная инициализация
- пропуск инициализации "a" из-за метки "case"
- пропуск инициализации "s" из-за метки "case"
Однако, если заменить Switch() на обычные операторы ветвления, то всё работает именно так, как мне нужно в данном примере:
if (menuA == 1) {
char s = chooseSimbol();
int a = chooseLineLength();
for (int i = 0; i < a; i++) {
std::cout << s;
}
}
else {
char s = chooseSimbol();
int a = chooseLineLength();
for (int i = 0; i < a; i++) {
std::cout << s << "\n";
}
}
Первые две ошибки я вроде бы исправил, сделав индивидуальный идентификатор каждой переменной, но не понимаю почему дебаг ругается на это, разве case 1 и case 2 - это не две разные области видимости?
Вторые две ошибки я никак не могу решить.
Ответы (1 шт):
Само по себе case не определяет область видимости, так что ваши объявления переменных оказались в одном блоке. Грубо, как если бы вы наприали
int x = 1;
int x = 2;
Просто поместите код каждого case в фигурные скобки:
case 1:
{
char s = chooseSimbol();
int a = chooseLineLength();
for (int i = 0; i < a; i++) {
std::cout << s;
}
}
break;
case 2:
{
char s = chooseSimbol();
int a = chooseLineLength();
for (int i = 0; i < a; i++) {
std::cout << s << "\n";
}
}
break;
Тем самым вы ограничиваете области видимости до нужного уровня :)