Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : Jérémy
Question sur le switch-case ?
-
Jérémy
Administrateur du site- Messages : 2722
- Âge : 44
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Bonjour à tous ,
Je m’aperçois que la fonction switch , ne peux contenir qu'une seule ligne de traitement ?
Peut être , ai-je mal compris?
Dans l'exemple il donne :
Je ne peux donc pas ecrire :
Si vous avez une explication, car ce me parait bizarre, si on veut faire quelques calcul ou autre, on est obligé de passé par une fonction.
Je m’aperçois que la fonction switch , ne peux contenir qu'une seule ligne de traitement ?
Peut être , ai-je mal compris?
Dans l'exemple il donne :
Code : Tout sélectionner
switch (phase) {
case 0: Lo(); break;
case 1: Mid(); break;
case 2: Hi(); break;
default: Message("Invalid state!");
}
Je ne peux donc pas ecrire :
Code : Tout sélectionner
case0 : traitement1; traitement2; traitement3; break;
Si vous avez une explication, car ce me parait bizarre, si on veut faire quelques calcul ou autre, on est obligé de passé par une fonction.
Question sur le switch-case ?
- Subzero64170
Débutant- Messages : 51
- Âge : 37
- Enregistré en : octobre 2015
- Localisation : PAU
Salut Jeremy,
Apparemment on peut exécuter plusieurs instructions à la suite dans un case en language C; d'aprés cet exemple de prog d'un arduino ça à l'air possible voici le lien vers la page : lien switch case arduino
Apparemment on peut exécuter plusieurs instructions à la suite dans un case en language C; d'aprés cet exemple de prog d'un arduino ça à l'air possible voici le lien vers la page : lien switch case arduino
Code : Tout sélectionner
// fait un choix parmi plusieurs messages reçus
switch (message) {
case 0: //si le message est "0"
//allume que la sortie 3
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
break;
case 1: //si le message est "1"
//allume que la sortie 4
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
break;
case 2: //si le message est "2"
//allume que la sortie 5
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
break;
}
Question sur le switch-case ?
-
Jérémy
Administrateur du site- Messages : 2722
- Âge : 44
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Hello Subzero,
Je crois que justement ça ne fonctionne pas avec mikroC . Je ne suis pas certains alors je ferais quelques tests demain , si je trouve le temps.
Je pensais aussi que ça fonctionnait comme ca, ca me paraitrais normal , bizarre ! je te tiens au jus .
Je crois que justement ça ne fonctionne pas avec mikroC . Je ne suis pas certains alors je ferais quelques tests demain , si je trouve le temps.
Je pensais aussi que ça fonctionnait comme ca, ca me paraitrais normal , bizarre ! je te tiens au jus .
Question sur le switch-case ?
- paulfjujo
Expert- Messages : 2589
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonsoir,
il faut mettre des accolades entre chaque "case"
voir state machine ... usage immoderé de switch case ...
un extrait ci dessous
ET c'est pas fini !
il faut mettre des accolades entre chaque "case"
Code : Tout sélectionner
switch (phase) {
case 0:
{
Led1=0;
Led2=1;
Tache1();
break;
}
case 1:
{
Led2=0;
Led3=1;
Tache2();
break;
}
case 2:
{
Led3=0;
Led4=1;
Tache3();
break;
}
default: Message("Invalid state!");
}
voir state machine ... usage immoderé de switch case ...
un extrait ci dessous
Code : Tout sélectionner
switch (BT_state) {
case 0: {
response = 0; // Clear response
if (tmp == 'C') // We have 'C', it could be CMD<cr><lf> or CONN
BT_state = 1; // Expecting 'M' or 'N'
if (tmp == 'A') // We have 'A', it could be AOK<cr><lf>
BT_state = 11; // expecting 'O'
if (tmp == 'E') // We have 'E', it could be END<cr><lf>
BT_state = 31; // expecting 'N'
break; // ...
}
case 1: {
if (tmp == 'M')
BT_state = 2;
//else if (tmp == 'O')
// BT_state = 22;
else
BT_state = 0;
break;
}
case 2: {
if (tmp == 'D') {
response = BT_CMD; // CMD
BT_state = 40;
}
else
BT_state = 0;
break;
}
... etc ..
ET c'est pas fini !
Question sur le switch-case ?
- Claudius
Passioné- Messages : 260
- Âge : 69
- Enregistré en : septembre 2015
- Localisation : ELANCOURT (78 - YVELINES)
- Contact :
Bonsoir,
Le seul cas où les accolades sont requises est lorsque une ou plusieurs variables doivent être définies dans le traitement du case pour bien marquer leur espace de visibilité. Ces variables seront donc locales au bloc et non visibles à l'extérieur de celui-ci...
Si aucune variable n'est définie, les spécifications du Langage C n'imposent pas ces 2 accolades ouvrante et fermante
Zéro pointé si le compilateur impose lesdites accolades dans tous les cas ;-(
il faut mettre des accolades entre chaque "case"...
Le seul cas où les accolades sont requises est lorsque une ou plusieurs variables doivent être définies dans le traitement du case pour bien marquer leur espace de visibilité. Ces variables seront donc locales au bloc et non visibles à l'extérieur de celui-ci...
Si aucune variable n'est définie, les spécifications du Langage C n'imposent pas ces 2 accolades ouvrante et fermante
Zéro pointé si le compilateur impose lesdites accolades dans tous les cas ;-(
Enregistreur de traces GPS & Boussole GPS parlante (PIC & Arduino)
Question sur le switch-case ?
-
Jérémy
Administrateur du site- Messages : 2722
- Âge : 44
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Bonsoir,
Merci à tous les trois pour vos réponses. Ca fonctionne parfaitement avec les accolades !
Je suis persuadé d'avoir essayé avec , sans succès . peut être que j'avais mis le break en dehors ; En tout état de cause , j'ai forcement du me gourer quelque part , car la ça fonctionne parfaitement .
Un switchn'est plus ni moins qu'un if...elseif en fait !
Merci à tous les trois pour vos réponses. Ca fonctionne parfaitement avec les accolades !
Je suis persuadé d'avoir essayé avec , sans succès . peut être que j'avais mis le break en dehors ; En tout état de cause , j'ai forcement du me gourer quelque part , car la ça fonctionne parfaitement .
Un switchn'est plus ni moins qu'un if...elseif en fait !
Question sur le switch-case ?
Question sur le switch-case ?
-
Jérémy
Administrateur du site- Messages : 2722
- Âge : 44
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Il me semble que c'est pour ne pas prendre en compte les cas suivants. Ainsi on évite d'évaluer les autres possibilités du case.
le break fait sauté directement à la fin du case !
Il me semble , attendons l'avis de quelqu'un de mieux calé que moi
le break fait sauté directement à la fin du case !
Il me semble , attendons l'avis de quelqu'un de mieux calé que moi
Question sur le switch-case ?
Question sur le switch-case ?
- Claudius
Passioné- Messages : 260
- Âge : 69
- Enregistré en : septembre 2015
- Localisation : ELANCOURT (78 - YVELINES)
- Contact :
Bonjour,
Compléments de réponses dans l'ordre chronologique:
@Jérémy:
- Un switch n'est plus ni moins qu'un if...else if en fait ! => Oui, sauf que le compilateur optimise suivant le nombre de cas à tester (cf. Implémentation)
- le break fait sauter directement à la fin du case ! => Non, fait sauter directement à la fin du switch à son l'accolade fermante terminant l'exécution de l'instruction switch pour être précis
@Gérard:
- Si on entre dans un cas, il n'est pas nécessaire d'évaluer tous les autres cas qui suivent => En quelque sorte oui, mais il est plus juste d'écrire "il ne faut pas évaluer..." dans le cas avec break . Attention à l'absence involontaire de break qui conduit à un enchainement d'instructions de plusieurs cas mais qui peut être volontaire si cet enchainement est souhaité; mettre dans ce cas un commentaire explicite ou mieux une instruction goto / label pour le lecteur du code qui n'aura pas à se poser de question (volontaire ou oublie ?)
- J'ai loupé quelque chose ? => Oui et non, si un doute toujours se reporter aux spécifications du langage (cf. notamment Instruction switch)
NB: L’accueil d'accolades ouvrante / fermante dans le bloc case / break est requis lorsque le compilateur "accepte" la définition de variables locales dans ce bloc mais n'est pas obligatoire si aucune variable n'est à définir (désolé d'insister ).
Voir C++ : Déclarer une variable dans un switch; c'est expliqué pour du C++ mais le compilateur C applique la même règle...
Compléments de réponses dans l'ordre chronologique:
@Jérémy:
- Un switch n'est plus ni moins qu'un if...else if en fait ! => Oui, sauf que le compilateur optimise suivant le nombre de cas à tester (cf. Implémentation)
- le break fait sauter directement à la fin du case ! => Non, fait sauter directement à la fin du switch à son l'accolade fermante terminant l'exécution de l'instruction switch pour être précis
@Gérard:
- Si on entre dans un cas, il n'est pas nécessaire d'évaluer tous les autres cas qui suivent => En quelque sorte oui, mais il est plus juste d'écrire "il ne faut pas évaluer..." dans le cas avec break . Attention à l'absence involontaire de break qui conduit à un enchainement d'instructions de plusieurs cas mais qui peut être volontaire si cet enchainement est souhaité; mettre dans ce cas un commentaire explicite ou mieux une instruction goto / label pour le lecteur du code qui n'aura pas à se poser de question (volontaire ou oublie ?)
- J'ai loupé quelque chose ? => Oui et non, si un doute toujours se reporter aux spécifications du langage (cf. notamment Instruction switch)
NB: L’accueil d'accolades ouvrante / fermante dans le bloc case / break est requis lorsque le compilateur "accepte" la définition de variables locales dans ce bloc mais n'est pas obligatoire si aucune variable n'est à définir (désolé d'insister ).
Voir C++ : Déclarer une variable dans un switch; c'est expliqué pour du C++ mais le compilateur C applique la même règle...
Enregistreur de traces GPS & Boussole GPS parlante (PIC & Arduino)
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 47 invités