CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Quelle est l'erreur dans mon code ? :(

NorbertJoubert
NorbertJoubert
Niveau 4
10 mai 2012 à 21:22:29

Bonsoir :)
Je cherche à créer ce que j'appellerais un roman interactif mais là je suis vraiment bloqué. J'ai fait un système du style "Blablabla que faites-vous ?" et là je présente trois choix différents à la personne A, B et C. Puis je mets un Scanf où je demande à la personne de rentrer A, B ou C en fonction de son choix. Le problème c'est que là je bloque avec les if à l'intérieur du premier f (ifception :rire2: )

  1. include <stdio.h>
  2. include <stdlib.h>

int main(int argc, char *argv[])

{

printf(" Vous arrivez devant le donjon. Que faites-vous ? ");

char choix;
scanf ("%c",&choix);

if (choix == 'A')
{printf ("blablabla");
scanf ("%c",&choix);

if (choix == 'A')
{printf ("lol");}
else if (choix == 'B')
{printf ("lil");}
else if (choix == 'C')
{printf ("lul");}
else {printf ("\n \n Veuillez entrer A, B ou C ! \n \n");}}

else if (choix == 'B')
{printf ("blablabla");
scanf ("%c",&choix);

if (choix == 'A')
{printf ("lol");}
else if (choix == 'B')
{printf ("lil");}
else if (choix == 'C')
{printf ("lul");}
else {printf ("\n \n Veuillez entrer A, B ou C ! \n \n");}}

else if (choix == 'C')
{printf ("blablabla");
scanf ("%c",&choix);

if (choix == 'A')
{printf ("lol");}
else if (choix == 'B')
{printf ("lil");}
else if (choix == 'C')
{printf ("lul");}
else {printf ("\n \n Veuillez entrer A, B ou C ! \n \n");}}

else {printf ("\n \n Veuillez entrer A, B ou C ! \n \n");}

}

Voilà c'est un peu long mais le code n'est vraiment pas complexe donc je vous demande votre aide ici. :(

En espérant que quelqu'un puisse me venir en aide :)

Adblock_Crack
Adblock_Crack
Niveau 6
10 mai 2012 à 21:25:35

Et c'est quoi le problème ?

csamy81
csamy81
Niveau 48
10 mai 2012 à 21:37:23

J'ai pas testé, mais ce code a l'air très peu ergonomique, très sale.

Recommence en utilisant des fonctions ! Et pourquoi ne pas stocker les phrases comme "Vous arrivez devant le donjon" dans un fichier texte ? Comme ça tu pourras l'éditer facilement si tu veux faire des changements :)

Pwote
Pwote
Niveau 7
10 mai 2012 à 21:39:23

Je suis pas expert mais là tu a deux crochets :
else {printf ("\n \n Veuillez entrer A, B ou C ! \n \n");}}

chris_27
chris_27
Niveau 10
10 mai 2012 à 21:40:19

scanf ("%c",&choix);
:d) ça, c'est fondamentalement une connerie, parce que scanf a une sémantique moisie. :(

La seule solution décente pour éviter les ennuis :
1. remplace %c par %d,
2. définis un
int saisie;
3. remplace &choix par &saisie,
4. ajoute un
choix = saisie;
après le scanf.

Le problème, c'est la saisie de <entrée> qui est un %c indésirable.

Après, il y a sûrement une grosse imbrication de if mal fichue aussi. Le switch est ton ami. :-)))

NorbertJoubert
NorbertJoubert
Niveau 4
10 mai 2012 à 21:42:14

En gros quand je lance le programme tout va bien à la première étape donc je fais par exemple A puis Enter. Ok, j'accède à la seconde étape mais là je ne peux plus rien écrire et je n'ai plus qu'à fermer le programme... :(

Sinon csamy81 j'ai des connaissances très limités en programmation pour l'instant donc les fonctions je ne saurais pas faire. En revanche pour le fichier texte je suis intéresse par l’initiative si tu sais comment faire je suis preneur. :)

chris_27
chris_27
Niveau 10
10 mai 2012 à 21:45:58

« En gros quand je lance le programme tout va bien à la première étape donc je fais par exemple A puis Enter. Ok, j'accède à la seconde étape mais là je ne peux plus rien écrire et je n'ai plus qu'à fermer le programme... :( » :d) donc c'est exactement ce que je décris.

À la deuxième étape, tu te récupères le <enter> que tu avais saisi avant et qui vient tout faire foirer. :(

chris_27
chris_27
Niveau 10
10 mai 2012 à 21:50:48

PS: hum, ce que j'ai dis marche pour 1/2/3/..., pas pour A/B/C/... :(

NorbertJoubert
NorbertJoubert
Niveau 4
10 mai 2012 à 21:51:04

Chris_27 je viens de faire ceci :

char guillemet = '"' ;
char choix;
int saisie;
scanf ("%d",&saisie);
saisie == choix;

if (choix == 'A')
{printf ("\n \n Tu prends ton elan afin d'enfoncer la porte mais au moment ou tu allais la \n percuter une personne l'ouvre. C'est un domestique venu t'accueillir que tu \n percute et qui est alors violemment envoye vers mur. Le malheureux semble \n s'etre brise la nuque. Que fais-tu ? \n A - Tu empruntes l'escalier principal sans te soucier du serviteur \n B - Tu t'approche de l'infortune valet pour verifier s'il est encore en vie \n C - Tu sors du donjon \n CHOICE: ");
scanf ("%d",&saisie);

if (choix == 'A')
{printf ("lol");}
else if (choix == 'B')
{printf ("lil");}
else if (choix == 'C')
{printf ("lul");}
else {printf ("\n \n Veuillez entrer A, B ou C ! \n \n");}}

Mais ça ne marche pas beaucoup mieux;

chris_27
chris_27
Niveau 10
10 mai 2012 à 21:56:34

Oui, j'ai tellement l'habitude de voir des 1/2/3/... que j'ai répondu trop vite.

Si tu veux vraiment saisir une lettre, il faut t'y prendre encore autrement. Tu peux faire :

char saisie[80];

fgets(saisie, 80, stdin);
choix = saisie[0];

chris_27
chris_27
Niveau 10
10 mai 2012 à 22:03:07

Après réflexion, je suis arrivé à ce code ci.

  1. include <stdio.h>

int main()
{
    char choix;

    scanf("%c", &choix);
    printf("%c\n---\n", choix);

    scanf("\n%c", &choix);
    printf("%c\n", choix);

    return 0;
}

L'astuce étant de rajouter un '\n' avant le %c dans le second scanf, de façon à virer le '\n' issu de la première saisie.

Là où ça devient funky...

chris@tarsonis:~/Temp% gcc scanf.c
chris@tarsonis:~/Temp% ./a.out
AZ
A
---
Z

all: Si quelqu'un sait m'expliquer exactement ce que fait le second scanf dans ce cas là, je suis prenneur. :(

NorbertJoubert
NorbertJoubert
Niveau 4
10 mai 2012 à 22:16:28

Merci beaucoup Chris_27 en fait je n'ai même pas eu besoin de modifier le code de base. En ajoutant \n devant %c cela a marché genre : scanf("\n%c", &choix) comme tu me l'avais conseillé. Je ne saurais en revanche pas dire pourquoi :(

Toujours est-il que je te remercie :)

chris_27
chris_27
Niveau 10
10 mai 2012 à 22:35:45

Le gros inconvénient de "\n%c", c'est que le jour où tu fais des scanf dans certaines branches de if et pas dans d'autres, je ne sais pas trop comment ça va se passer.

Après, l'exemple dans mon message précédent tend à me faire dire
« Dediou, suffit de mettre "\n%c" partout et basta ! ».

chris_27
chris_27
Niveau 10
10 mai 2012 à 22:36:35

PS: à noter que si plus tard tu demandes un entier, il y a fort à parier qu'il te faudra "\n%d" au lieu de l'habituel "%d".

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment