2010-05-26 6 views
13

En ce qui concerne l'instruction switch/case dans le code C++ ci-dessous: "Case 1" est évidemment faux, alors comment/pourquoi est-il entré dans la boucle do-while?Déclarations Switch/Case en C++

#include <iostream> 

using namespace std; 

int main() { 

    int test = 4; 

    switch(test) { 
     case 1: do { 
      case 2: test++; 
      case 3: test++; 
      case 4: cout << "How did I get inside the do-while loop?" << endl; break; 
      case 5: test++; 
     } while(test > 0); 
     cout << test << endl; 
    } 
} 
+0

Je ne vois pas de 'case 7' dans votre exemple –

+0

légère faute de frappe, j'ai changé le 7 -> 1 – user320723

Répondre

18

C'est Duff's Device, qui est une technique ancienne et astucieuse pour sauter au milieu d'une boucle.

+2

intelligent ...? Je pense que cela dépend plus de l'affaire. Je ne l'utiliserai pas si cela compromet la lisibilité du code. Pouvez-vous me donner un exemple plus concret où cela peut s'appliquer? – Phong

+1

@Phong: Les choses mauvaises peuvent encore être intelligentes. –

+0

Monsieur, vous semblez avoir fait vos devoirs! +1 de moi! –

0

Je ne l'ai pas testé, mais en général la boucle do/while doit être entrée aussi longtemps que vous n'avez pas « casser » la déclaration mise en œuvre ...

0

Le commutateur n'évalue/ne comprend pas le code source. Il est juste une commande ici pour sauter directement à l'étiquette de code source case 4

0

La raison pour laquelle vous atteignez le do-while est parce que:

Instructions de commutation commencent le traitement à la première étiquette. Si elle n'atteint PAS une instruction break, elle continuera à travers chaque étiquette successivement jusqu'à ce qu'elle en touche une (dans ce cas, elle se termine), ou elle a traversé chaque étiquette et exécuté tout le code à l'intérieur, puis quitte.

Questions connexes