Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
770 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Pourquoi ll'absence d'un break dans un switch fait tout executer

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Pourquoi ll'absence d'un break dans un switch fait tout executer

n°253902
grosmethos
Posté le 26-11-2002 à 12:40:00  profilanswer
 

Salut
 
Mon prof , juste à titre informatif, nous a montré que l'absence d'un break dans un block switch, fait que tous les cas sont executés..
Si quelqu'un sait pourquoi..je lui trnasmettrais la reponse
Merci
@+

mood
Publicité
Posté le 26-11-2002 à 12:40:00  profilanswer
 

n°253904
lorill
Posté le 26-11-2002 à 12:41:08  profilanswer
 

:??:  
 
parce que c'est défini comme ca, c'est tout...

n°253906
grosmethos
Posté le 26-11-2002 à 12:44:45  profilanswer
 

:heink:  ok mais ça surprend car il y  quand meme le case devant chaque comparaison

n°253908
antp
Super Administrateur
Champion des excuses bidons
Posté le 26-11-2002 à 12:48:05  profilanswer
 

bhen faut bien montrer qu'il s'agit d'un nouveau cas et non de l'instruction suivante du cas précédent


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°253909
lorill
Posté le 26-11-2002 à 12:48:26  profilanswer
 

Ben oui. C'est la définition du langage.
 
exemple :
 

Code :
  1. int a = 5
  2. switch(a)
  3. {
  4.   case 1: printf("1\n" );
  5.   case 2: printf("2\n" );
  6.   case 3: printf("3\n" );
  7.   case 4: printf("4\n" );
  8.   case 5: printf("5\n" );
  9.   case 6: printf("6\n" );
  10. }


Ca va t'afficher 5 et 6, tout n'est pas exécuté, mais tout a partir du cas donné. Le break permet de sortir d'un bloc quel qu'il soit, ca marche avec les boucles, mais aussi avec le switch. En gros, tu sors pour ne pas executer ce qui suit.

n°253910
Carbon_14
Posté le 26-11-2002 à 12:50:44  profilanswer
 

Y a des fois où ça peut même servir !!
 
Quand on vient de BASIC, on est habitué à ce que chaque CASE soit "autonome" mais en C, comme dit lorill, c'est défini comme ça. On continue tant que pas fin du switch ou pas break rencontré.
 
Si on a  
 
switch (iOption)
{
  case 0:
  case 1:
  case 2:
    ExecuteBidule(iOption);
 
  case 3:
  case 4:
  case 5:  
  case 6:
    ExecuteAutreBidule(iOption);
    break;
 
  default:
    FaitPresqueRien(iOption);
}
 
ça évite de répéter le code pour chaque case, ou de faire des super if( && && ).
 
0, 1, 2 exécutent Bidule d'abord puis Autrebidule, mais 3,4,5,6 que le second.

n°253956
antp
Super Administrateur
Champion des excuses bidons
Posté le 26-11-2002 à 13:42:54  profilanswer
 

carbon_14 a écrit a écrit :

 
Quand on vient de BASIC, on est habitué à ce que chaque CASE soit "autonome"




 
En Pascal aussi
 
 

carbon_14 a écrit a écrit :

 
switch (iOption)
{
  case 0:
  case 1:
  case 2:
    ExecuteBidule(iOption);
 
  case 3:
  case 4:
  case 5:  
  case 6:
    ExecuteAutreBidule(iOption);
    break;
 
  default:
    FaitPresqueRien(iOption);
}
 
ça évite de répéter le code pour chaque case, ou de faire des super if( && && ).
 
0, 1, 2 exécutent Bidule d'abord puis Autrebidule, mais 3,4,5,6 que le second.




 
bah en Basic y a pas moyen de faire comme en Pascal ?
 
case iOption of
  0..2:
    ExecuteBidule(iOption);
  3..6:
    ExecuteAutreBidule(iOption);
else
    FaitPresqueRien(iOption);
end;


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°254051
Carbon_14
Posté le 26-11-2002 à 15:26:25  profilanswer
 

En Quick/Q/Visual Basic, on ferait (de mémoire)
 
select case iOption
 case 0, 1, 2
   ExecuteBidule(iOption);
   ExecuteAutreBidule(iOption);
   rem on sort du select case
 case 3, 4, 5, 6
   ExecuteAutreBidule(iOption);
   rem on sort du select case
 case else
   FaitPresqueRien(iOption);
end select
 

n°254058
antp
Super Administrateur
Champion des excuses bidons
Posté le 26-11-2002 à 15:29:46  profilanswer
 

ouais la même chose donc ;)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°254061
El_gringo
Posté le 26-11-2002 à 15:32:21  profilanswer
 

Hooo... un vincent grosméthos !!
ça va bien ?
Alors maintenant t'es en cours ? décidément, j'ai du mal à te suivre toi ! tu fais quoi du coup ?

mood
Publicité
Posté le 26-11-2002 à 15:32:21  profilanswer
 

n°254173
grosmethos
Posté le 26-11-2002 à 17:26:40  profilanswer
 

bon rien avoir avec le prog....desolé pour les autres...:)
 
Pour le gringo, aprés 8mois chez Lecler (dev appli ASP), mon CDD c'est terminé...avec pas de projet derrier..
Donc je me suis inscrit à la fac en cours du soir C++/Java...
 
Au mois decembre je repare sur un CDD de 1mois..voir 1mois et demie pour une agence web...mais je developpe à la maison cette fois çi :)
 
Si non dans la maison ou j'habite actuellement je travail sur un projet de jeu de salle en resaux...avec des petites subventions europpenes qui vont bien..fin si le dossier passe...
 
Voila tu sais tout!!
 
Et toi t'en sort avec le ged :)

n°254189
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 26-11-2002 à 17:55:12  profilanswer
 

un switch c'est bien ce que ca veut dire, un branchement conditionnel: une fois rentré, à moins de breaké, toutes les instructions sont exécutées


---------------
du bon usage de rand [C] / [C++]
n°254769
Musaran
Cerveaulté
Posté le 27-11-2002 à 02:23:18  profilanswer
 

Le C est un peu particulier.
 
Les "case" fonctionnent à la manière d'étiquettes, et le "switch" comme un goto multiple (bien qu'il n'y ait pas compatibilité avec goto).
Le bloc-accolade du switch est donc presque banal avec du code linéaire.
 
On peut d'ailleurs faire des trucs ignobles, comme avec goto.
 
Duff's device

Code :
  1. void copy(short* to,short* from, int count)
  2. {
  3. int n=(count+7)/8;
  4. switch(count%8){
  5.  do{
  6. case 0: *to= *from++;
  7. case 7: *to= *from++;
  8. case 6: *to= *from++;
  9. case 5: *to= *from++;
  10. case 4: *to= *from++;
  11. case 3: *to= *from++;
  12. case 2: *to= *from++;
  13. case 1: *to= *from++;
  14.  }while(--n>0);
  15. }
  16. }


 
Ou même pire (exemple dénué de sens):

Code :
  1. switch(i){
  2. case 1:
  3. do1();
  4. if(t){
  5. default:
  6.  dodefault();
  7.  while(t){
  8. case 2:
  9.   do2();
  10.  }
  11. }
  12. }


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°254813
antp
Super Administrateur
Champion des excuses bidons
Posté le 27-11-2002 à 09:15:38  profilanswer
 
n°254814
lorill
Posté le 27-11-2002 à 09:16:14  profilanswer
 

antp a écrit a écrit :

 :ouch:  




rassure toi, t'en verras jamais du comme ca (j'espere du moins)

n°254882
BifaceMcLe​OD
The HighGlandeur
Posté le 27-11-2002 à 11:05:47  profilanswer
 

Taz@PPC a écrit a écrit :

un switch c'est bien ce que ca veut dire, un branchement conditionnel: une fois rentré, à moins de breaké, toutes les instructions sont exécutées




Non, ça ne veut rien dire. Les créateurs de C ont choisi ce comportement, mais il n'est pas plus logique qu'un autre. Et très clairement, il est moins intuitif que le branchement exclusif.
 
D'ailleurs, si le switch était implémenté comme une table de fonction, on trouverait totalement illogique le comportement du switch C... :sarcastic:

n°255476
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 27-11-2002 à 19:58:00  profilanswer
 

j'ouvre mon dico
 
"A device used to break or open an electric circuit"
 
donc faut se brancher et breaker  :D


---------------
du bon usage de rand [C] / [C++]
n°256081
BifaceMcLe​OD
The HighGlandeur
Posté le 28-11-2002 à 13:22:55  profilanswer
 

Exemple de switch physique, si l'on suit ta définition :


       |
       o
      /|\
     / | \
     | | |


 :sarcastic:

n°256083
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 28-11-2002 à 13:24:51  profilanswer
 

:p  :na:


---------------
du bon usage de rand [C] / [C++]

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Pourquoi ll'absence d'un break dans un switch fait tout executer

 

Sujets relatifs
[C] break;Executer un script PHP à partir dun script perl ....
Switch... Case... Defaultexecuter du code situer dans un fichier texte c possible???
Comment executer du code qui se trouve dans un buffer ?Comment dire à Norton antivirus que tel script peut s'éxécuter
komment configurer UltraEdit pour compiler et executer?De l'art d'utiliser le break
faire executer un vbs...[PHP] Executer une application sur le serveur php à distance
Plus de sujets relatifs à : Pourquoi ll'absence d'un break dans un switch fait tout executer


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR