Задать вопрос
@newuser8888

Проблемы с пониманием switch конструкции, почему без break default в следующей итерации не выполняется?

Не работает следующая итерация дефолт, но с break работает. Я использую 2*2.
В общем вопрос еще проще сформулирую: если break есть - в следующей итерации дефолт выполняется, без брика в следующей итерации дефолт не выполняет. Как брик изменяет выполняться коду или нет? Он же просто прерывает код. Почему он влияет на поведение, ведь я нахожусь в бесконечной петле while(true).

double term() {
  double left = primary();
  Token t = ts.get(); // get the next token from token stream

    while (true) {
    switch (t.kind) {
    case '*':
    cout << "I'm inside! '*'\n";
      left *= primary();
      t = ts.get();
     // break был здесь, но без брика не работает, но ведь дефолт в некст итерации все равно выполняется
    // а если так - то какая разница, есть break или нет, такие дела, как понимать?
    case '/': {
      double d = primary();
      if (d == 0)
        error("divide by zero");
      left /= d;
      t = ts.get();
      break;
    }
    default:
      cout << "I'm inside! 'default'\n";  // (Я должен был быть тут, абсурд?)
      ts.putback(t); // put t back into the token stream
      return left;
    }
  }
}


В общем, я не знал что следующие case если не было break выполняются без проверки. Извиняюсь!
  • Вопрос задан
  • 389 просмотров
Подписаться 1 Простой 5 комментариев
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы