Partage
  • Partager sur Facebook
  • Partager sur Twitter

je dois appuyer 2 fois sur entrée

Sujet résolu
    22 octobre 2008 à 13:58:52

    Bonjour !!!
    Je voudrait faire un logiciel qui me donne un mot, et je doit le traduire. Comme des fois, il y a besoin d'espace, je dois utiliser fgets. Mais le pb, c'est que je dois appuyer 2 fois sur entrée pour vaider mon choix.
    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
    #include <string.h>
    
    #define couleur(param) printf("\033[%sm",param)
    
    int hasard(int min, int max)
    {
    	return (int) (min + ((float) rand() / RAND_MAX * (max - min + 1)));
    }
    
    void viderBuffer()
    {
        int c = 0;
        while (c != '\n' && c != EOF)
        {
            c = getchar();
        }
    }
     
    int lire(char *chaine, int longueur)
    {
        char *positionEntree = NULL;
     
        if (fgets(chaine, longueur, stdin) != NULL)
        {
            positionEntree = strchr(chaine, '\n');
            if (positionEntree != NULL)
            {
                *positionEntree = '\0';
            }
            else
            {
                viderBuffer();
            }
            return 1;
        }
        else
        {
            viderBuffer();
            return 0;
        }
    }
    
    
    int main()
    {
    	
    	char mot1[100] = {100}, mot2[100], traductionPense[100];
    	long rejouerPartie = 1, reinitialiserTableau = 0;
    	FILE* fichier = NULL;
    	fichier = fopen("allemand1.txt", "r");
    	char lettreActuel = 0;
    	long nombreDeMot = 0, numMotChoisi = 0, i = 0, justes = 0, fautes = 0;
    	if (fichier != NULL)
        {
            // On peut lire et écrire dans le fichier
        	do 
    		{
    			
    			
    			
    			lettreActuel = 0;
    			nombreDeMot = 0, numMotChoisi = 0, i = 0;
    			reinitialiserTableau = 0;
    			
    			while (i <= 99)
    			{
    				mot1[i] = 0;
    				i ++;
    				
    			}
    			i = 0;
    			while (i <= 99)
    			{
    				mot2[i] = 0;
    				i ++;
    				
    			}
    			i = 0;
    			while (i <= 99)
    			{
    				traductionPense[i] = 0;
    				i ++;
    				
    			}
    			i = 0;
    			
    			rewind(fichier);
    			while (lettreActuel != EOF)
    			{
    				lettreActuel = fgetc(fichier);
    				if (lettreActuel == '\n')
    					nombreDeMot ++;
    			}
    			//printf("Il y a %ld mots dans le dictionnaire", nombreDeMot);
    			numMotChoisi = hasard(0, nombreDeMot - 1);
    		
    			rewind(fichier);
    			while (numMotChoisi > 0)
    			{
        			lettreActuel = fgetc(fichier);
        			if (lettreActuel == '\n')
            			numMotChoisi--;
    			}
    			lettreActuel = fgetc(fichier);
    			do
            	{
                
            	    mot1[i] = lettreActuel;
    				i ++;
    				lettreActuel = fgetc(fichier); // On lit le caractère
            	} while (lettreActuel != '\t');
    		
    			i = 0;
    		
    			do
           	 	{
            	    lettreActuel = fgetc(fichier); // On lit le caractère
            	    mot2[i] = lettreActuel;
    				i ++;
            	} while (lettreActuel != '\n');
    			mot2[i - 1] = '\0';
    			
    		
    			printf(" Voici le mot a traduire : %s. Donnez la traduction : ", mot1);
    			lire(traductionPense, 99);
    			viderBuffer();
    			if (strcmp(mot2, traductionPense) == 0) // Si strcmp renvoie 0 (chaînes identiques)
        		{
           	 		printf("Gagné !!! La traduction de %s est bien %s\n", mot1, mot2);
        			justes ++;
    				
    			}
        		else
        		{
    				// PERDU
    				couleur("1;37;40");
        	 		printf("Perdu !!! La traduction de \"%s\" est \"%s\" et non \"%s\".\n", mot1, mot2, traductionPense);
        			couleur("0");
    				fautes ++;
    			
    			}
    			printf("\nTu as fais %ld fautes et %ld justes.", fautes, justes);
    			/*do
    			{
    				
    			
    				viderBuffer();
    				rejouerPartie = 1;
    				printf("\nSi vous voulez rejouer, taper 1, sinon, taper 2 : ");
    				scanf("%ld", &rejouerPartie);
    				
    			} while (rejouerPartie != 1 && rejouerPartie != 2);
    			
    			
    			
    		fclose(fichier);
    	}
        else
        {
            // On affiche un message d'erreur si on veut
            printf("Impossible d'ouvrir le fichier test.txt");
        }
    	
    	return (0);
    }
    


    Que faire ?
    • Partager sur Facebook
    • Partager sur Twitter
      22 octobre 2008 à 16:24:39

      C'est parce que tu veux vider le buffer stdin alors qu'il n'y a rien à vider, résultat tu dois refaire une saisie.
      • Partager sur Facebook
      • Partager sur Twitter
        22 octobre 2008 à 16:30:43

        Maintenant, ça marche !!!
        Merci beaucoup :p:p:p
        • Partager sur Facebook
        • Partager sur Twitter

        je dois appuyer 2 fois sur entrée

        × 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