C ++ для логической ошибки оператора цикла и переключателя - PullRequest
1 голос
/ 21 марта 2011

В этом цикле (при условии amount равно 2) вместо печати:

1. [op1]
2. [op2]

печатает:

1. [op1]
2. [op2]
3. [op3]
4. [op4]
5. [op5]

Почему? Как я могу это исправить?

for(int i=1;i<=amount;i++){
            //string s;
            switch(i){
            case 1:
                cout << i << ". " << op1 << endl;
                //s = op1;
            case 2:
                cout << i << ". " << op2 << endl;
                //s = op2;
            case 3:
                cout << i << ". " << op3 << endl;
                //s = op3;
            case 4:
                cout << i << ". " << op4 << endl;
                //s = op4;
            case 5:
                cout << i << ". " << op5 << endl;
                //s = op5;
            }
            //cout << i << ". " << s << endl;
        }

Ответы [ 4 ]

10 голосов
/ 21 марта 2011

Вам нужно использовать перерыв; или switch () будет иметь то, что называется "падение".

(Это означает, что он выполняет ваш кейс: и затем продолжает все, что будет потом, включая код в других операторах кейса).

2 голосов
/ 21 марта 2011

Вы должны вставить break; -ставления в конце каждой из case: -частей.

Это потому, что switch () {} является просто переформулировкой goto, случаипросто метки, а не реальные блоки (именно поэтому они используют синтаксис меток вместо блочного синтаксиса, например case ... { }.

2 голосов
/ 21 марта 2011

Вам нужно поставить

break;

в конце каждого дела.В противном случае он переходит к case1, а затем продолжается до конца выбора.(case1, 2, 3, 4, 5)

1 голос
/ 21 марта 2011

Поместите оператор "break" после падежей, иначе поток управления будет проходить напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...