Partage
  • Partager sur Facebook
  • Partager sur Twitter

Boucle lue 2 fois (TP du pendu)

Sujet résolu
    16 août 2017 à 17:50:10

    Bonjours à tous,

    Je suis débutant en langage C et je travaille sur le 2e TP du cours.

    Ma boucle est lue 2 fois et la 2e fois comme si je n'avais rien saisie. Le code est bien compilé mais c'est un peu dérangeant.

    Merci d'avance pour vos réponses.

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>
    
    void presentation();
    char saisie();
    void afficheMot (char *cache, char *mot, char lettre);
    
    int main(int argc, char *argv[]) {
    	char mot[] = "ROUGE";
    	char cache[] = "*****";
    
    	presentation();
    
    	while(strcmp(mot, cache) != 0) {
    		afficheMot(cache, mot, saisie());
    		printf("%s", cache);
    		
    	}
    }
    
    void presentation() {
    	printf("	 =================\n");
    	printf("	|   JEU DU PENDU  |\n");
    	printf("	 =================\n\n");
    	printf("INSTRUCTIONS:\n\n");
    	printf("Le but de ce jeu est de trouver le mot mystère en moins de 10 essais.\nTout caractère spécial y compris les accents ne sont pas acceptés.\n\n");
    }
    
    char saisie() {
    	char lettre;
    	printf("\nProposez une lettre\n");
    	lettre = getchar();
    	lettre = toupper(lettre);
    	return lettre;
    }
    
    void afficheMot (char *cache, char *mot, char lettre) {
    	int i;
    
    	for(i = 0; i < 5; i++) {
    		if(lettre == mot[i] && cache[i] == '*') {
    			cache[i] = lettre;
    		}
    	}	
    }


    Et voilà ce qui est affichz lors de l'execution:

    	 =================
    	|   JEU DU PENDU  |
    	 =================
    
    INSTRUCTIONS:
    
    Le but de ce jeu est de trouver le mot mystère en moins de 10 essais.
    Tout caractère spécial y compris les accents ne sont pas acceptés.
    
    
    Proposez une lettre
    r
    R****
    Proposez une lettre
    R****
    Proposez une lettre
    o
    RO***
    Proposez une lettre
    RO***
    Proposez une lettre
    g
    RO*G*
    Proposez une lettre
    RO*G*
    Proposez une lettre
    u
    ROUG*
    Proposez une lettre
    ROUG*
    Proposez une lettre
    e
    ROUGE# 



    • Partager sur Facebook
    • Partager sur Twitter
      16 août 2017 à 17:58:13

      Hello,

      Problème classique: il faut vider le buffer clavier après le 1er getchar(). Lorsque tu tapes R suivi de enter (ou return), getchar lit le premier caractère (le R), mais le enter (le '\n') reste dans le buffer clavier. Quand tu reviens dans ta fonction, le getchar() le lit.

      -
      Edité par edgarjacobs 16 août 2017 à 17:59:12

      • Partager sur Facebook
      • Partager sur Twitter

      On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

      Boucle lue 2 fois (TP du pendu)

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown