Problèmes affichage texte

Problèmes affichage texte - C - Programmation

Marsh Posté le 20-09-2013 à 22:43:32    

Bonjour, j'ai voulue créer un programme pour réviser mon vocabulaire d'anglais, et je rencontre un problème qui est que quand je vais chercher un mot dans un tableau et que je l'affiche il manque la première lettre, et pareille quand il compare avec ma réponse. Merci d'avance  
 
Voici le code :
 
 
 

Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <time.h>
  5. int main(int argc, const char * argv[])
  6. {
  7.     int NombredeMots = 0, i = 0;
  8.     int NombreAleatoire = 0;
  9.     int Min = 1;
  10.     int francaisornot = 0;
  11.     int traduc = 2;
  12.     int compteur = 0;
  13.     char* Mots = NULL;
  14.     char* MotsTraduit = NULL;
  15.     char* MotsaVerifier = NULL;
  16.    
  17.     // On demande le nombre de mots  
  18.     printf("Combien de mots voulez-vous mettre ?\n" );
  19.     scanf("%d", &NombredeMots);
  20.    
  21.     if (NombredeMots > 0)
  22.     {
  23.        
  24.         //Tableaux Dynamique
  25.         Mots = malloc(NombredeMots * sizeof(char));
  26.         MotsTraduit = malloc(NombredeMots * sizeof(char));
  27.         MotsaVerifier = malloc(NombredeMots * sizeof(char));
  28.        
  29.        
  30.         //Demande mots  
  31.         for (i = 0 ; i < NombredeMots ; i++)
  32.         {
  33.             printf("Quel est le %d mot?\n ", i + 1);
  34.             scanf("%s", &Mots[i]);
  35.             printf("Mettez sa traduction :\n" );
  36.             scanf("%s", &MotsTraduit[i]);
  37.         }
  38.             while (compteur < NombredeMots)
  39.             {
  40.                 compteur++;
  41.                 //aleatoire: choix du mots  
  42.                 srand(time(NULL));
  43.                 NombreAleatoire = (rand() % (NombredeMots - Min + 1)) + Min;
  44.            
  45.                 //aleatoire: choix français ou traduction
  46.                 srand(time(NULL));
  47.                 francaisornot = (rand() % (traduc - Min + 1)) + Min;
  48.            
  49.                 //Mots Traduits vers Français
  50.                 if (francaisornot == 1)
  51.                 {
  52.                     //Demande Traduction
  53.                     NombreAleatoire = i;
  54.                     printf("Quel est la traduction de %s\n", &MotsTraduit[1]);
  55.                     scanf("%s", &MotsaVerifier[i]);
  56.                    
  57.                     //Vérification
  58.                     if (strcmp(&MotsaVerifier[i], &Mots[i]) == 0)
  59.                     {
  60.                         printf("Bonne Réponse\n" );
  61.                     }
  62.                     else
  63.                     {
  64.                         printf("reponse fausse, la réponse était: %s\n", &Mots[i]);
  65.                     }
  66.                    
  67.                 }
  68.                
  69.                 //Mots Français vers traduction  
  70.                 else if (francaisornot == 2)
  71.                 {
  72.                     //Demande Traduction  
  73.                     NombreAleatoire = i;
  74.                     printf("Quel est la traduction de %s\n", &Mots[i]);
  75.                     scanf("%s", &MotsaVerifier[i]);
  76.                    
  77.                     //Vérification  
  78.                     if (strcmp(&MotsaVerifier[i], &MotsTraduit[i]) == 0)
  79.                     {
  80.                         printf("Bonne Réponse\n" );
  81.                     }
  82.                     else
  83.                     {
  84.                         printf("reponse fausse, la réponse était: %s\n", &MotsTraduit[i]);
  85.                     }
  86.    
  87.                    
  88.                 }
  89.            
  90.             }
  91.         }
  92.        
  93.         free(Mots);
  94.         free(MotsTraduit);
  95.         free(MotsaVerifier);
  96.    
  97.     return 0;
  98.    
  99.     }

Reply

Marsh Posté le 20-09-2013 à 22:43:32   

Reply

Marsh Posté le 20-09-2013 à 23:06:13    

Bonjour !
 
Vos tableaux de mots, qui sont des tableaux de chaînes, devraient être des char** et non pas des char *.
 
En réglant ce petit problème, vous ne devriez pas être très loin de la solution.
 
Bonne continuation !

Reply

Marsh Posté le 20-09-2013 à 23:43:56    

Merci de cette réponse, j'ai corrigé le programme mais j'obtiens une erreur : EXC_BAD_ACCESS

Reply

Marsh Posté le 21-09-2013 à 03:34:44    

Postez le code modifié et donnez-nous plus d'indications sur l'erreur obtenue. Quel compilateur / OS ?
 
Bon courage !

Reply

Marsh Posté le 21-09-2013 à 09:01:17    

J'utilise Xcode, et l'erreur obtenue est EXC_BAD_ACCES(code=2, adress=0x7fff8aa924ad)  
 
Voici le code modifié :  

Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <time.h>
  5. int main(int argc, const char * argv[])
  6. {
  7.     int NombredeMots = 0, i = 0;
  8.     int NombreAleatoire = 0;
  9.     int Min = 1;
  10.     int francaisornot = 0;
  11.     int traduc = 2;
  12.     int compteur = 0;
  13.     char** Mots = NULL;
  14.     char** MotsTraduit = NULL;
  15.     char** MotsaVerifier = NULL;
  16.    
  17.     // On demande le nombre de mots  
  18.     printf("Combien de mots voulez-vous mettre ?\n" );
  19.     scanf("%d", &NombredeMots);
  20.    
  21.     if (NombredeMots > 0)
  22.     {
  23.        
  24.         //Tableaux Dynamique
  25.         Mots = malloc(NombredeMots * sizeof(char));
  26.         MotsTraduit = malloc(NombredeMots * sizeof(char));
  27.         MotsaVerifier = malloc(NombredeMots * sizeof(char));
  28.        
  29.        
  30.         //Demande mots  
  31.         for (i = 0 ; i < NombredeMots ; i++)
  32.         {
  33.             printf("Quel est le %d mot?\n ", i + 1);
  34.             scanf("%s", Mots[i]);
  35.             printf("Mettez sa traduction :\n" );
  36.             scanf("%s", MotsTraduit[i]);
  37.         }
  38.             while (compteur < NombredeMots)
  39.             {
  40.                 compteur++;
  41.                 //aleatoire: choix du mots  
  42.                 srand(time(NULL));
  43.                 NombreAleatoire = (rand() % (NombredeMots - Min + 1)) + Min;
  44.            
  45.                 //aleatoire: choix français ou traduction
  46.                 srand(time(NULL));
  47.                 francaisornot = (rand() % (traduc - Min + 1)) + Min;
  48.            
  49.                 //Mots Traduits vers Français
  50.                 if (francaisornot == 1)
  51.                 {
  52.                     //Demande Traduction
  53.                     NombreAleatoire = i;
  54.                     printf("Quel est la traduction de %s\n", MotsTraduit[1]);
  55.                     scanf("%s", MotsaVerifier[i]);
  56.                    
  57.                     //Vérification
  58.                     if (strcmp(MotsaVerifier[i], Mots[i]) == 0)
  59.                     {
  60.                         printf("Bonne Réponse\n" );
  61.                     }
  62.                     else
  63.                     {
  64.                         printf("reponse fausse, la réponse était: %s\n", Mots[i]);
  65.                     }
  66.                    
  67.                 }
  68.                
  69.                 //Mots Français vers traduction  
  70.                 else if (francaisornot == 2)
  71.                 {
  72.                     //Demande Traduction  
  73.                     NombreAleatoire = i;
  74.                     printf("Quel est la traduction de %s\n", Mots[i]);
  75.                     scanf("%s", MotsaVerifier[i]);
  76.                    
  77.                     //Vérification  
  78.                     if (strcmp(MotsaVerifier[i], MotsTraduit[i]) == 0)
  79.                     {
  80.                         printf("Bonne Réponse\n" );
  81.                     }
  82.                     else
  83.                     {
  84.                         printf("reponse fausse, la réponse était: %s\n", MotsTraduit[i]);
  85.                     }
  86.    
  87.                    
  88.                 }
  89.            
  90.             }
  91.         }
  92.        
  93.         free(Mots);
  94.         free(MotsTraduit);
  95.         free(MotsaVerifier);
  96.    
  97.     return 0;

Reply

Marsh Posté le 21-09-2013 à 16:46:26    

Bonjour !
 
Quand je vous disais de changer les tableaux de char *, en char **, cela ne concernait pas que le typage de la variable, mais aussi (et surtout) la façon d'allouer les tableaux ...
 
Un truc du genre  (je simplifie l'écriture)
 
Mots = malloc(NbMots*sizeof(char *))
for (i < NbMots) Mots[i] = malloc(TailleMaxDUnMot*sizeof(char)
 
Sinon, en effet, cela marche moins bien !
 
Soyez plus rigoureux sur l'utilisation / allocation de votre mémoire et cela ira tout seul.
 
Bonne continuation !
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed