2014-11-09 3 views
-4

Итак, я попытался запустить этот кусок кода и не мог понять, почему он дает мне вывод, который дает мне. Если я ввожу 4, то почему результат 17 ?? Я действительно не понимаю. Может кто-нибудь объяснить?Понимание этого оператора Switch

#include<iostream> 
using namespace std; 
int main() { 
    int num; 
    int alpha = 10; 
    cout << "Enter a number :" << endl; 
    cin >> num; 
    switch(num) { 
     case 3: 
      alpha++; 
      break; 
     case 4: 
     case 6: 
      alpha = alpha + 3; 
     case 8: 
      alpha = alpha + 4; 
      break; 
     default: 
      alpha = alpha + 5; 
    } 

    cout << alpha << endl; 

    return 0; 
} 
+1

Скажите, разве вы еще не научились использовать предварительный просмотр и исправить форматирование? – Deduplicator

ответ

4

Если у вас нет каких-либо break; в теле case (или что-то еще, что бы выйти из дела, как goto) выполнение продолжится со следующего сазе (оно будет проваливаются как это обычно известно).

В вашем случае, поступающего 4 будет делать сначала case 4:, затем падают до case 6:, а затем case 8: и конечный результат будет альфа (10) + 3 + 4 = 17. поскольку case 8: имеет break; переключатель заявление в выйдет здесь.

На стороне записки, есть нечто, называемое соединение назначение +=, что вы можете использовать, чтобы сэкономить место, так что вместо

alpha = alpha + 3; 

вы можете сделать это:

alpha += 3; 
+0

Так вот как это .. спасибо !!! – spidertothefly127

0

сазе работы следующим образом: выполнение переходит к соответствующему оператору case и продолжается до разрыва или конца блока переключателя. Следовательно, также выполняется инструкция после случая 8. Итак, 10 + 3 + 4 = 17.

В большинстве случаев отказ от записи в конце блока корпуса считается ошибкой. В некоторых случаях было бы полезно продолжить выполнение, но это нужно четко прокомментировать, чтобы предотвратить путаницу.

Смежные вопросы