Switch en C
Résolu
seo610
Messages postés
705
Statut
Membre
-
seo610 Messages postés 705 Statut Membre -
seo610 Messages postés 705 Statut Membre -
Bonjour,
comment faire un switch dans un autre switch comme ceci :
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char y;
int z;
printf("un : ");
scanf("%d", &z); /* ici je rentre 1 et je vais a la case 1 mais le scanf de la case un est comme skiper et va au default du switch (y)*/
switch (z)
{
case 1:
printf("deux : ");
scanf("%c", &y);
switch (y)
{
case 'y':
printf("yaye\n");
break;
case 'n':
printf("youchuuisme\n");
break;
default:
printf("big smoke\n");
break;
}
break;
case 2:
printf("alec\n");
break;
default:
printf("allah\n");
break;
}
system("PAUSE");
}
comment faire pour faire le scanf("%c", &y); ?
merci
comment faire un switch dans un autre switch comme ceci :
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char y;
int z;
printf("un : ");
scanf("%d", &z); /* ici je rentre 1 et je vais a la case 1 mais le scanf de la case un est comme skiper et va au default du switch (y)*/
switch (z)
{
case 1:
printf("deux : ");
scanf("%c", &y);
switch (y)
{
case 'y':
printf("yaye\n");
break;
case 'n':
printf("youchuuisme\n");
break;
default:
printf("big smoke\n");
break;
}
break;
case 2:
printf("alec\n");
break;
default:
printf("allah\n");
break;
}
system("PAUSE");
}
comment faire pour faire le scanf("%c", &y); ?
merci
A voir également:
- Switch en C
- Android switch - Accueil - Android
- Smart switch pc - Télécharger - Divers Bureautique
- Switch off - Télécharger - Divers Utilitaires
- Switch 2 - Accueil - Jeu vidéo
- Logiciel switch - Télécharger - Conversion & Extraction
11 réponses
Tu donnes peu d'explication, donc on ne sait pas quelle est l'erreur. J'imagine que tu as l'impression que ton scanf n'est pas pris en compte ?
Si c'est le cas, mets un getchar(); après chaque scanf.
Sinon merci d'en dire plus.
Cdlt
Si c'est le cas, mets un getchar(); après chaque scanf.
Sinon merci d'en dire plus.
Cdlt
ce n'est pas une erreur de compilation, c'est le deuxième scanf qui est pas prit en compte et le getchar(); ne change rien. il va tout de suite au default de (y).
Je n'ai jamais parlé d'erreur de compilation ;-))).
Bref, le problème est classique et la solution est bien celle que je t'ai donné. Peut-être que tu l'as mal appliquée.
Peux-tu poster ton nouveau code avec les getchar() ?
Bref, le problème est classique et la solution est bien celle que je t'ai donné. Peut-être que tu l'as mal appliquée.
Peux-tu poster ton nouveau code avec les getchar() ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char y;
int z;
printf("un : ");
scanf("%d", &z);
switch (z)
{
case 1:
printf("deux : ");
scanf("%c", &y);
getchar();
switch (y)
{
case 'y':
printf("ca marche\n");
break;
case 'n':
printf("ca marche aussi\n");
break;
default:
printf("big smoke\n");
break;
}
break;
case 2:
printf("Timi\n");
break;
default:
printf("allah\n");
break;
}
system("PAUSE");
}
#include <stdlib.h>
int main(int argc, char *argv[])
{
char y;
int z;
printf("un : ");
scanf("%d", &z);
switch (z)
{
case 1:
printf("deux : ");
scanf("%c", &y);
getchar();
switch (y)
{
case 'y':
printf("ca marche\n");
break;
case 'n':
printf("ca marche aussi\n");
break;
default:
printf("big smoke\n");
break;
}
break;
case 2:
printf("Timi\n");
break;
default:
printf("allah\n");
break;
}
system("PAUSE");
}
Tu n'as pas mis comme je t'avais dit un getchar() après CHAQUE scanf.
Et pas de chance pour toi, le plus important c'était le premier ;-))).
Et pas de chance pour toi, le plus important c'était le premier ;-))).
Tout simplement car en C, il y a un buffer clavier.
Lorsque t'es à la ligne scanf("%d",&z), tu vas devoir entrer ton nombre et appuyer sur "entrée" pour valider. Le nombre ira dans la variable z et la touche entrée (code ascii : '\n') ira dans le buffer.
Ensuite vient le prochain scanf("%c",&y). Et comme '\n' est un caractère, il ira se greffer dans la variable &y, et tu penseras que le scanf n'a pas été exécuté.
En faisant un getchar() (et plus généralement un flush du buffer), tu videras le '\n' rendant le buffer clavier vide, prêt à recevoir une nouvelle lecture clavier dès lors qu'il rencontra un scanf.
Lorsque t'es à la ligne scanf("%d",&z), tu vas devoir entrer ton nombre et appuyer sur "entrée" pour valider. Le nombre ira dans la variable z et la touche entrée (code ascii : '\n') ira dans le buffer.
Ensuite vient le prochain scanf("%c",&y). Et comme '\n' est un caractère, il ira se greffer dans la variable &y, et tu penseras que le scanf n'a pas été exécuté.
En faisant un getchar() (et plus généralement un flush du buffer), tu videras le '\n' rendant le buffer clavier vide, prêt à recevoir une nouvelle lecture clavier dès lors qu'il rencontra un scanf.
@Char Snipeur,
Ca ne marchera pas. D'une manière générale les '\n' dans les [f|s]scanf perturbent plus qu'autre chose.
A la limite, on peut tenter : scanf("%d%*c",&z);
Hormis le fait que ça soit moins visible, cela ne marchera bien que si l'utilisateur n'est pas farceur.
Pour bien faire, il faudrait se construire une fonction qui vide le buffer entièrement.
Ca ne marchera pas. D'une manière générale les '\n' dans les [f|s]scanf perturbent plus qu'autre chose.
A la limite, on peut tenter : scanf("%d%*c",&z);
Hormis le fait que ça soit moins visible, cela ne marchera bien que si l'utilisateur n'est pas farceur.
Pour bien faire, il faudrait se construire une fonction qui vide le buffer entièrement.