Не работает следующая итерация дефолт, но с 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 выполняются без проверки. Извиняюсь!