le switch case peut t'il contenir plusieurs valeures??

le switch case peut t'il contenir plusieurs valeures?? - C++ - Programmation

Marsh Posté le 13-12-2002 à 16:08:40    

Saluté todo el mundo !!!!
je comprend pas !! mon prog ne fonctionne pas j'ai fé un truc du genre ça :
Switch(a)
{ case 1||2||3||4 :
printf("barbatruc" );
default :  
printf("pas bien" );
}
 
et il me fé toujours "pas bien" sauf quand a vo 1... :-(
est ce que la syntaxe est correcte ou est ce que c que c pas possible...???!!!!!

Reply

Marsh Posté le 13-12-2002 à 16:08:40   

Reply

Marsh Posté le 13-12-2002 à 16:12:01    

vandekerput a écrit :

Saluté todo el mundo !!!!
je comprend pas !! mon prog ne fonctionne pas j'ai fé un truc du genre ça :
Switch(a)
{ case 1||2||3||4 :
printf("barbatruc" );
default :  
printf("pas bien" );
}
 
et il me fé toujours "pas bien" sauf quand a vo 1... :-(
est ce que la syntaxe est correcte ou est ce que c que c pas possible...???!!!!!


 
Où t'as vu qu'on pouvait écrire un truc comme ça ?
Tu crois que ça s'improvice le C !? :pt1cable:  
Il te faut une doc, une livre, un tuto, qqch quoi !
Pour info, ton truc ça sera plutot :

Code :
  1. Switch(a)
  2. {
  3.   case 1:
  4.   case 2:
  5.   case 3:
  6.   case 4:
  7.          printf("barbatruc" );
  8.          break;
  9.   default :
  10.          printf("pas bien" );
  11. }

Reply

Marsh Posté le 13-12-2002 à 16:15:33    

vandekerput a écrit :

Saluté todo el mundo !!!!
je comprend pas !! mon prog ne fonctionne pas j'ai fé un truc du genre ça :
Switch(a)
{ case 1||2||3||4 :
printf("barbatruc" );
default :  
printf("pas bien" );
}
 
et il me fé toujours "pas bien" sauf quand a vo 1... :-(
est ce que la syntaxe est correcte ou est ce que c que c pas possible...???!!!!!


 
tu t'es chié dessus, || est l'opérateur qui revoie 1 si l'un des ses 2 opérandes est pas égal à 0 ton expression vaut (((1||2)||3)||4)=1
c'est  
 

Code :
  1. Switch(a)
  2. { case 1 :
  3.   case 2 :
  4.   case 3 :
  5.   case 4 :
  6.   printf("barbatruc" );
  7.   break;
  8. default :
  9. printf("pas bien" );
  10. }


 
qui a le comportement que tu veux.
(tu avais oublié le break aussi)
 
lorsqu'il trouve une étiquette, il continue à descendre en exécutant tout jusqu'au break où il sort du bloc.
 

Reply

Marsh Posté le 13-12-2002 à 16:55:10    

merci bocoup les gars... :jap:  
 
moi y en avoir débuté le c hier... :whistle:  
et c'est pas super simple à se rapeler les syntaxes... :pt1cable:  
mais c'est vrai que dans la logique logistiquement évidentielle du probleme de reflexion logique il était tout à fait normal que la syntaxe ce comporte de cette manière, bon si je pèt un cable c'est pa grave, on est vendredi... la semaine a été dure en émotion et le truc c'est que vous en avez rien à foutre de ce que je di mais que vous lisez quand même parce que vous avez rien d'autre à foutre... :pt1cable:  
 
 :jap:  

Reply

Marsh Posté le 14-12-2002 à 02:45:24    

Code :
  1. if( a == (1||2||3) )

Question: Y aurait-il moyen de faire que ça marche comme voulu ?
 
Genre avec les lambda-expressions (http://www.boost.org/libs/lambda/doc/index.html).


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 14-12-2002 à 06:19:07    

Musaran a écrit :

Code :
  1. if( a == (1||2||3) )

Question: Y aurait-il moyen de faire que ça marche comme voulu ?
 
Genre avec les lambda-expressions (http://www.boost.org/libs/lambda/doc/index.html).


 
c'est du pattern-matching :
(syntaxe caml)
 
match a with  
  1|2|3->valeur si oui
  | _ -> valeur pour le reste
 
_ correspond à un joker, il correspond à n'importe quoi.
 
C'est la première alternative qui correspond qui l'emporte (pas de backtracking, qui est l'apanage des langages logique comme prolog ou cury ).
 
sinon, avec des combinateurs et des curyfications il doit y avoir moyen de faire quelquechose (un truc approchant les monads) mais je maîtrise pas.
 
sinon, bien sûr tu peux fair un truc du style :
 
let rec is_in e l = match l with
  | [] -> false
  | x::_ when x = e -> true
  | _::xs -> is_in e q
 
mais bon parcourir une liste pour savoir si un élément est dedans ... ça pête pas des briques.
 
avec un peu de bidouille :
let (||) v (a,r) = (a, if r then r else a=v);;
let test = fun a -> (a,false);;
let result (a, r) = r;;
# result (112||11||(test 10));;
- : bool = false
# result (112||11||(test 11));;
- : bool = true
 
Y'a d'autres solutions avec des combinateurs mais c'est pas super plus optimisé.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed