Switch en C
Résolu/Fermé
seo610
Messages postés
596
Date d'inscription
mardi 9 février 2010
Statut
Membre
Dernière intervention
30 juin 2015
-
24 août 2010 à 07:12
seo610 Messages postés 596 Date d'inscription mardi 9 février 2010 Statut Membre Dernière intervention 30 juin 2015 - 24 août 2010 à 22:17
seo610 Messages postés 596 Date d'inscription mardi 9 février 2010 Statut Membre Dernière intervention 30 juin 2015 - 24 août 2010 à 22:17
A voir également:
- Switch en C
- Logiciel switch - Télécharger - Conversion & Extraction
- Samsung switch pc - Télécharger - Divers Bureautique
- Brancher switch sur pc ✓ - Forum Nintendo Switch
- Switch qwerty azerty - Guide
- Zelda 3 switch - Accueil - Guide jeu vidéo
11 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
Modifié par fiddy le 24/08/2010 à 09:20
Modifié par fiddy le 24/08/2010 à 09:20
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
seo610
Messages postés
596
Date d'inscription
mardi 9 février 2010
Statut
Membre
Dernière intervention
30 juin 2015
102
24 août 2010 à 09:37
24 août 2010 à 09:37
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).
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
24 août 2010 à 10:10
24 août 2010 à 10:10
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() ?
seo610
Messages postés
596
Date d'inscription
mardi 9 février 2010
Statut
Membre
Dernière intervention
30 juin 2015
102
24 août 2010 à 10:12
24 août 2010 à 10:12
oh yeah Ralph, tes revenu d'afrique quand?
sinon je veux faire mon code sans cheat, pas cool sinon.
sinon je veux faire mon code sans cheat, pas cool sinon.
seo610
Messages postés
596
Date d'inscription
mardi 9 février 2010
Statut
Membre
Dernière intervention
30 juin 2015
102
24 août 2010 à 10:31
24 août 2010 à 10:31
eat it -al yalkotruc (classique)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
seo610
Messages postés
596
Date d'inscription
mardi 9 février 2010
Statut
Membre
Dernière intervention
30 juin 2015
102
24 août 2010 à 10:15
24 août 2010 à 10:15
#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");
}
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
24 août 2010 à 10:17
24 août 2010 à 10:17
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 ;-))).
seo610
Messages postés
596
Date d'inscription
mardi 9 février 2010
Statut
Membre
Dernière intervention
30 juin 2015
102
24 août 2010 à 10:20
24 août 2010 à 10:20
bon, ca marche merci, mais je comprend pas pourquoi y faut un getchar après les scanf?
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
24 août 2010 à 10:37
24 août 2010 à 10:37
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
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
24 août 2010 à 10:43
24 août 2010 à 10:43
si tu fais scanf("%d\n",&z) ça ne résoudrait pas le problème aussi ?
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
Modifié par fiddy le 24/08/2010 à 12:04
Modifié par fiddy le 24/08/2010 à 12:04
@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.
seo610
Messages postés
596
Date d'inscription
mardi 9 février 2010
Statut
Membre
Dernière intervention
30 juin 2015
102
24 août 2010 à 22:17
24 août 2010 à 22:17
ok, c'est ce que je pensais aussi de pourquoi y fallais mettre les getchar. merci pour votre aide, pour les buffer ca va etre pour une autre fois.