Почему возникает ошибка в switch-case?

Рейтинг: 0Ответов: 2Опубликовано: 12.01.2023

Ошибка: "значение метки случая уже есть в данном переключателе в строке

switch (str[i])
    {
    case ')' || '}' || ']':

        if (st.empty())
        {
            count = i + 1;
            return false;
            
        }

        else if ((str[i] == ')' && st.top() == '(') || (str[i] == '}' && st.top() == '{') || (str[i] == ']' && st.top() == '['))
        {
            st.pop();
            
        }
        break;

    case '(' || '{' || '[':
        st.push(str[i]);
        count++;
        break;

На первой картинке ошибка ссылается на строку во второй картинке

Ответы

▲ 5

Запись ')' || '}' || ']' возвращает всегда булевое значение, то-есть правду или в числах 1. И switch сравнивает букву str[i] всегда только с одним числом, то-есть с результатом выражения, в вашем случае с единицей или буквой с кодом один : '\01'.
Чтобы выполнялся один код на разных аргументах запись должна быть другой :

case ')' :
case '}' :
case ']' :
  код
  break ;
▲ 1

в case дублируется значение типа bool. case: ('(' || '{' || '[') и case: (')' || '}' || ']')

error: duplicate case value