Error variable + cours sur les classes.

Error variable + cours sur les classes. - C - Programmation

Marsh Posté le 06-03-2006 à 17:43:36    

Bonsoir, alors voila j'ai fait un petit programme qui marche parfaitement bien, mais lors de la fermeture de celui-ci il me renvoi un erreur:
Run-Time Check Failure #2 - Stack around the variable 'Mot' was corrupted.
J'aimerais savoir svp d'ou vient cette erreur et comment la corriger SVP, merci.
 
Sinon j'aimerais savoir aussi s'il vous plait si vous ne connaitrier pas de bon tutoriel pour apprendre le fonctionnement des Classes et aussi pour apprendre a maitriser la librairie SDL. Voila merci beaucoup tout le monde


Message édité par kirua_sama le 06-03-2006 à 19:04:28
Reply

Marsh Posté le 06-03-2006 à 17:43:36   

Reply

Marsh Posté le 06-03-2006 à 17:58:51    

ton programme est buggé, tu peux montrer le code ?

Reply

Marsh Posté le 06-03-2006 à 18:34:34    

Jmet un copyright dessus avant ?  :lol:  :p  
 

Code :
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <ctype.h>
  4. #include <stdlib.h>
  5. #include <time.h>
  6. char lireCaractere();
  7. long NombreAleatoire(long nombreMax);
  8. int main(int argc, char* argv[])
  9. {
  10. FILE* Dictionnaire = NULL;
  11. long NombreDeMot = 0;
  12. char ChaineDeStockage[50] = "";
  13. long NumMotChoisi = 0;
  14. char Mot[] = "";
  15. char MaLettre = NULL;
  16. char CaractereTrouve = 0;
  17. int Credit = 10;
  18. char MotTrouve[30] = "***************************";
  19. char* BonneLettre = NULL;
  20. int Gagne = 1;
  21. long CaractereLu = 0;
  22. Dictionnaire = fopen("Dictionnaire.txt", "r" );
  23.  printf("Bienvenue dans le jeu du pendu\n\n" );
  24. if (Dictionnaire != NULL)
  25.     {
  26.         printf("l'ouverture du Dictionnaire s'est bien deroulee\n" );
  27.  while(!feof(Dictionnaire))
  28.  {
  29.   fgets(ChaineDeStockage, 50, Dictionnaire);
  30.   NombreDeMot++;
  31.  }
  32.  rewind(Dictionnaire);
  33.  NumMotChoisi = NombreAleatoire(NombreDeMot);
  34.  while (NumMotChoisi > 0)
  35.  {
  36.   CaractereLu = fgetc(Dictionnaire);
  37.    if (CaractereLu == '\n')
  38.    NumMotChoisi--;
  39.  }
  40.     /* Le curseur du fichier est positionné au bon endroit.
  41.      On n'a plus qu'à faire un fgets qui lira la ligne */
  42.   fgets(Mot, 100, Dictionnaire);
  43.    // On vire l'\n à la fin
  44.   Mot[strlen(Mot) - 1] = '\0';
  45.  printf("Il y a %ld mots dans le dico.\n\n", NombreDeMot);
  46.  fclose(Dictionnaire);
  47.     }
  48.     else
  49.     {
  50.            printf("Impossible d'ouvrir le fichier Dictionnaire.txt" );
  51.     }
  52. printf("Le mot a trouver est le suivant:    " );
  53. for(int i=0; i < strlen(Mot); i++)
  54.   {
  55.    printf("*" );
  56.   }
  57. printf("\n\n" );
  58. while(Credit !=0 && Gagne != 0)
  59. {
  60.  printf("Veuilez taper une lettre: " );
  61.  MaLettre = lireCaractere();
  62.  BonneLettre = strchr(Mot,MaLettre);
  63.  if(BonneLettre != NULL)
  64.  {
  65.   printf("Bravo, %c se trouve bien dans le mot:\nIl vous reste toujours %d Vies:\n", MaLettre, Credit);
  66.  }
  67.  else
  68.  {
  69.   Credit--;
  70.   printf("Desoler %c ne se trouve pas dans le mot:\nIl ne vous reste plus que %d Vies:\n", MaLettre, Credit);
  71.  }
  72.  for(int i=0; i < strlen(Mot); i++)
  73.   {
  74.    CaractereTrouve = Mot[i];
  75.    if(MaLettre==CaractereTrouve)
  76.    {
  77.     MotTrouve[i] = CaractereTrouve;
  78.    }
  79.   }
  80.   MotTrouve[strlen(Mot)] = '\0';
  81.   printf("\n%s", MotTrouve);
  82.   printf("\n\n" );
  83.   Gagne = strcmp(Mot, MotTrouve);
  84. }
  85. if(Credit == 0)
  86. {
  87.  printf("Il ne vous reste plus de vie, Vous avez perdu.... pfff le mot etait bien:  %s\n\n", Mot);
  88. }
  89. else if(Gagne == 0)
  90. {
  91.  printf("Bravo, vous avez gagne le mot etait bien:  %s\n\n", Mot);
  92. }
  93. system("PAUSE" );
  94.     return 0;
  95. }
  96. char lireCaractere()
  97. {
  98.     char caractere = 0;
  99.     caractere = getchar(); // On lit le premier caractère
  100.     caractere = toupper(caractere); // On met la lettre en majuscule si elle ne l'est pas déjà
  101.     // On lit les autres caractères mémorisés un à un jusqu'à le \n (pour les effacer)
  102.     while (getchar() != '\n') ;
  103.     return caractere; // On retourne le premier caractère qu'on a lu
  104. }
  105. long NombreAleatoire(long nombreMax)
  106. {
  107.     srand(time(NULL));
  108.     return (rand() % nombreMax);
  109. }


 
Voila mon code merci bien de m'aider.

Reply

Marsh Posté le 06-03-2006 à 18:49:39    

c'est du c, tu devrais deplacer ton topic dans la catégorie C

Reply

Marsh Posté le 06-03-2006 à 19:03:59    

d'accord desole... et pour les classes et SDL en c++ stp ?

Reply

Marsh Posté le 06-03-2006 à 19:24:27    

pour sdl, la doc sur le site officiel est si mauvaise que ca ? (on prends toujours un risque à aller voir ailleur)
pour le c++, il y a des lien ici (livres, doc divers, faq)
http://forum.hardware.fr/hardwaref [...] rup/stroup
 
et un bon cours online si tu veux
http://casteyde.christian.free.fr/ [...] book1.html

Reply

Marsh Posté le 06-03-2006 à 19:45:30    

Merci beaucoup pour les liens. euh oue bah la doc c'est bien mais j'aure bien voulu si ca existait un bon tuto pour bien passer de la console au graphique^^. Merci beaucoup. Je vais aller lire les cours :)
 
(Up pour mon probleme)

Reply

Marsh Posté le 06-03-2006 à 20:16:35    

kirua_sama a écrit :

Voila mon code merci bien de m'aider.


Commentaires et correction partiels. Bug trouvé.

Code :
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <ctype.h>
  4. #include <stdlib.h>
  5. #include <time.h>
  6. /* -ed-
  7. char lireCaractere();
  8. long NombreAleatoire(long nombreMax);
  9. Inutile. Il suffit de definir avant d'utiliser.
  10. */
  11. /* -ed- fonctions non exportees : ajoute static
  12. ajoute void pour avoir une forme 'prototypale'.
  13. */
  14. static char lireCaractere(void)
  15. {
  16.    char caractere = 0;
  17.    caractere = getchar(); // On lit le premier caractère
  18.    caractere = toupper(caractere); // On met la lettre en majuscule si elle ne l'est pas déjà
  19.    // On lit les autres caractères mémorisés un à un jusqu'au '\n' (pour les effacer)
  20.    while (getchar() != '\n')
  21.       ;
  22.    return caractere; // On retourne le premier caractère qu'on a lu
  23. }
  24. static long NombreAleatoire(long nombreMax)
  25. {
  26. /* -ed-
  27.    srand(time(NULL));
  28. doit etre appele une fois au debut du programme */
  29.    return (rand() % nombreMax);
  30. }
  31. int main(int argc, char* argv[])
  32. {
  33.    FILE* Dictionnaire = NULL;
  34.    long NombreDeMot = 0;
  35.    char ChaineDeStockage[50] = "";
  36.    long NumMotChoisi = 0;
  37.    char Mot[] = "";
  38.    /* -ed-
  39.    char MaLettre = NULL;
  40.    NULL est un pointeur. Tu veux sans doute dire 0.
  41.    */
  42.    char MaLettre = 0;
  43.    char CaractereTrouve = 0;
  44.    int Credit = 10;
  45.    char MotTrouve[30] = "***************************";
  46.    char* BonneLettre = NULL;
  47.    int Gagne = 1;
  48.    long CaractereLu = 0;
  49. /* -ed- deplace. Ajoute (unsigned) car srand() attend un unsigned int. */
  50.    srand((unsigned) time(NULL));
  51.    Dictionnaire = fopen("Dictionnaire.txt", "r" );
  52.    printf("Bienvenue dans le jeu du pendu\n\n" );
  53.    if (Dictionnaire != NULL)
  54.    {
  55.       printf("l'ouverture du Dictionnaire s'est bien deroulee\n" );
  56.       while (!feof(Dictionnaire))
  57.       {
  58. /* -ed-
  59.          fgets(ChaineDeStockage, 50, Dictionnaire);
  60.          c'est quoi ce 50 ?
  61.          */
  62.          fgets(ChaineDeStockage, sizeof ChaineDeStockage, Dictionnaire);
  63.          NombreDeMot++;
  64.          /* -ed- mmm... comptage, OK... */
  65.       }
  66.       rewind(Dictionnaire);
  67.       NumMotChoisi = NombreAleatoire(NombreDeMot);
  68.       /* -ed- OK, on saute les n-1 premiers mots. Astucieux. */
  69.       while (NumMotChoisi > 0)
  70.       {
  71.          CaractereLu = fgetc(Dictionnaire);
  72.          if (CaractereLu == '\n')
  73.             NumMotChoisi--;
  74.       }
  75.       /* Le curseur du fichier est positionné au bon endroit.
  76.        On n'a plus qu'à faire un fgets qui lira la ligne */
  77.       fgets(Mot, 50, Dictionnaire);
  78.        /* -ed-
  79.        BUG!
  80.        Tu as menti a ton compilateur. C'est pas 50, c'est sizeof Mot, et ca fait  1 !
  81.        Comportement indefini.
  82.        */
  83.       // On vire l'\n à la fin
  84.       Mot[strlen(Mot) - 1] = '\0';
  85. /* -ed- tu aurais pu afficher ca avant. */
  86.       printf("Il y a %ld mots dans le dico.\n\n", NombreDeMot);
  87.       fclose(Dictionnaire);
  88.    }
  89.    else
  90.    {
  91.       /* -ed- manquait un '\n' */
  92.       printf("Impossible d'ouvrir le fichier Dictionnaire.txt\n" );
  93.    }
  94. /* -ed- STOP! Si on a pas pu ouvrir le dictionnaire, me mot est "". On continue quand meme ? */
  95.    printf("Le mot a trouver est le suivant:    " );
  96.    /* -ed-
  97.    for(int i=0; i < strlen(Mot); i++)
  98.    Cette forme n'est pas supportee en C90
  99.    C'est pas une bonne idee de mettre le strlen() dans la boucle.
  100.    Il est evalue a chaque fois, alors qu'ici, il est invariant...
  101.    */
  102.    {
  103.       int const n = strlen(Mot);
  104.       int i;
  105.       for (i = 0; i < n; i++)
  106.       {
  107.          printf("*" );
  108.       }
  109.    }
  110.    printf("\n\n" );
  111.    while (Credit != 0 && Gagne != 0)
  112.    {
  113.       printf("Veuilez taper une lettre: " );
  114.       MaLettre = lireCaractere();
  115.       BonneLettre = strchr(Mot, MaLettre);
  116.       if (BonneLettre != NULL)
  117.       {
  118.          printf("Bravo, %c se trouve bien dans le mot:\nIl vous reste toujours %d Vies:\n", MaLettre, Credit);
  119.       }
  120.       else
  121.       {
  122.          Credit--;
  123.          printf("Desoler %c ne se trouve pas dans le mot:\nIl ne vous reste plus que %d Vies:\n", MaLettre, Credit);
  124.       }
  125.       {
  126.          int const n = strlen(Mot);
  127.          int i;
  128.          for (i = 0; i < n; i++)
  129.          {
  130.             CaractereTrouve = Mot[i];
  131.             if (MaLettre == CaractereTrouve)
  132.             {
  133.                MotTrouve[i] = CaractereTrouve;
  134.             }
  135.          }
  136.       }
  137.       MotTrouve[strlen(Mot)] = '\0';
  138.       printf("\n%s", MotTrouve);
  139.       printf("\n\n" );
  140.       Gagne = strcmp(Mot, MotTrouve);
  141.    }
  142.    if (Credit == 0)
  143.    {
  144.       printf("Il ne vous reste plus de vie, Vous avez perdu.... pfff le mot etait bien:  %s\n\n", Mot);
  145.    }
  146.    else if (Gagne == 0)
  147.    {
  148.       printf("Bravo, vous avez gagne le mot etait bien:  %s\n\n", Mot);
  149.    }
  150.    system("PAUSE" );
  151.    return 0;
  152. }


Message édité par Emmanuel Delahaye le 06-03-2006 à 20:38:37

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 06-03-2006 à 20:31:07    

waaaa merci enormement pour ton travail. Je vais retrailler tout le code avec tes commentaire ^^. ( je fai ca demin le je doi aller travailler ^^ ).

Reply

Marsh Posté le 08-03-2006 à 19:54:20    

Citation :

Code :
  1. Code :
  2.    1.
  3.       #include <stdio.h>
  4.    2.
  5.       #include <string.h>
  6.    3.
  7.       #include <ctype.h>
  8.    4.
  9.       #include <stdlib.h>
  10.    5.
  11.       #include <time.h>
  12.    6.
  13.      
  14.    7.
  15.       /* -ed-
  16.    8.
  17.       char lireCaractere();
  18.    9.
  19.       long NombreAleatoire(long nombreMax);
  20.   10.
  21.   11.
  22.       Inutile. Il suffit de definir avant d'utiliser.
  23.   12.
  24.   13.
  25.       */
  26.   14.
  27.      
  28.   15.
  29.       /* -ed- fonctions non exportees : ajoute static
  30.   16.
  31.   17.
  32.       ajoute void pour avoir une forme 'prototypale'.
  33.   18.
  34.   19.
  35.       */
  36.   20.
  37.       static char lireCaractere(void)
  38.   21.
  39.       {
  40.   22.
  41.         char caractere = 0;
  42.   23.
  43.      
  44.   24.
  45.         caractere = getchar(); // On lit le premier caractère
  46.   25.
  47.         caractere = toupper(caractere); // On met la lettre en majuscule si elle ne l'est pas déjà
  48.   26.
  49.      
  50.   27.
  51.         // On lit les autres caractères mémorisés un à un jusqu'au '\n' (pour les effacer)
  52.   28.
  53.         while (getchar() != '\n')
  54.   29.
  55.            ;
  56.   30.
  57.      
  58.   31.
  59.         return caractere; // On retourne le premier caractère qu'on a lu
  60.   32.
  61.       }
  62.   33.
  63.      
  64.   34.
  65.       static long NombreAleatoire(long nombreMax)
  66.   35.
  67.       {
  68.   36.
  69.       /* -ed-
  70.   37.
  71.         srand(time(NULL));
  72.   38.
  73.       doit etre appele une fois au debut du programme */
  74.   39.
  75.      
  76.   40.
  77.         return (rand() % nombreMax);
  78.   41.
  79.       }
  80.   42.
  81.      
  82.   43.
  83.       int main(int argc, char* argv[])
  84.   44.
  85.       {
  86.   45.
  87.         FILE* Dictionnaire = NULL;
  88.   46.
  89.         long NombreDeMot = 0;
  90.   47.
  91.         char ChaineDeStockage[50] = "";
  92.   48.
  93.         long NumMotChoisi = 0;
  94.   49.
  95.         char Mot[] = "";
  96.   50.
  97.      
  98.   51.
  99.         /* -ed-
  100.   52.
  101.         char MaLettre = NULL;
  102.   53.
  103.   54.
  104.         NULL est un pointeur. Tu veux sans doute dire 0.
  105.   55.
  106.         */ 
  107.   56.
  108.         char MaLettre = 0;
  109.   57.
  110.         char CaractereTrouve = 0;
  111.   58.
  112.         int Credit = 10;
  113.   59.
  114.         char MotTrouve[30] = "***************************";
  115.   60.
  116.         char* BonneLettre = NULL;
  117.   61.
  118.         int Gagne = 1;
  119.   62.
  120.         long CaractereLu = 0;
  121.   63.
  122.      
  123.   64.
  124.       /* -ed- deplace. Ajoute (unsigned) car srand() attend un unsigned int. */
  125.   65.
  126.         srand((unsigned) time(NULL));
  127.   66.
  128.      
  129.   67.
  130.         Dictionnaire = fopen("Dictionnaire.txt", "r" );
  131.   68.
  132.      
  133.   69.
  134.         printf("Bienvenue dans le jeu du pendu\n\n" );
  135.   70.
  136.      
  137.   71.
  138.         if (Dictionnaire != NULL)
  139.   72.
  140.         {
  141.   73.
  142.            printf("l'ouverture du Dictionnaire s'est bien deroulee\n" );
  143.   74.
  144.      
  145.   75.
  146.            while (!feof(Dictionnaire))
  147.   76.
  148.            {
  149.   77.
  150.       /* -ed-
  151.   78.
  152.               fgets(ChaineDeStockage, 50, Dictionnaire);
  153.   79.
  154.   80.
  155.               c'est quoi ce 50 ?
  156.   81.
  157.               */
  158.   82.
  159.               fgets(ChaineDeStockage, sizeof ChaineDeStockage, Dictionnaire);
  160.   83.
  161.               NombreDeMot++;
  162.   84.
  163.               /* -ed- mmm... comptage, OK... */
  164.   85.
  165.            }
  166.   86.
  167.      
  168.   87.
  169.            rewind(Dictionnaire);
  170.   88.
  171.      
  172.   89.
  173.            NumMotChoisi = NombreAleatoire(NombreDeMot);
  174.   90.
  175.      
  176.   91.
  177.            /* -ed- OK, on saute les n-1 premiers mots. Astucieux. */
  178.   92.
  179.            while (NumMotChoisi > 0)
  180.   93.
  181.            {
  182.   94.
  183.               CaractereLu = fgetc(Dictionnaire);
  184.   95.
  185.               if (CaractereLu == '\n')
  186.   96.
  187.                  NumMotChoisi--;
  188.   97.
  189.            }
  190.   98.
  191.      
  192.   99.
  193.            /* Le curseur du fichier est positionné au bon endroit.
  194. 100.
  195.             On n'a plus qu'à faire un fgets qui lira la ligne */
  196. 101.
  197.      
  198. 102.
  199.            fgets(Mot, 50, Dictionnaire);
  200. 103.
  201.             /* -ed-
  202. 104.
  203. 105.
  204.             BUG!
  205. 106.
  206. 107.
  207.             Tu as menti a ton compilateur. C'est pas 50, c'est sizeof Mot, et ca fait  1 !
  208. 108.
  209. 109.
  210.             Comportement indefini.
  211. 110.
  212.             */     Desole je ne comprends pas ici ton commentaire, j'ai mis 50 car je ne connais pas la taille de tout les mot de mon dictionnaire, je le met donc a 50 pour qu'il lise au maximum 50 caracteres par ligne, si je le mettais a sizeof Mot ca cree une erreur.
  213.    111.
  214.      
  215. 112.
  216.            // On vire l'\n à la fin
  217. 113.
  218.            Mot[strlen(Mot) - 1] = '\0';
  219. 114.
  220.      
  221. 115.
  222.       /* -ed- tu aurais pu afficher ca avant. */
  223. 116.
  224.            printf("Il y a %ld mots dans le dico.\n\n", NombreDeMot);
  225. 117.
  226.      
  227. 118.
  228.            fclose(Dictionnaire);
  229. 119.
  230.         }
  231. 120.
  232.         else
  233. 121.
  234.         {
  235. 122.
  236.            /* -ed- manquait un '\n' */
  237. 123.
  238.            printf("Impossible d'ouvrir le fichier Dictionnaire.txt\n" );
  239. 124.
  240.         }
  241. 125.
  242.      
  243. 126.
  244.       /* -ed- STOP! Si on a pas pu ouvrir le dictionnaire, me mot est "". On continue quand meme ? */
  245.       J'arrange ca immediatement
  246. 127.
  247.         printf("Le mot a trouver est le suivant:    " );
  248. 128.
  249.         /* -ed-
  250. 129.
  251.         for(int i=0; i < strlen(Mot); i++)
  252. 130.
  253. 131.
  254.         Cette forme n'est pas supportee en C90
  255. 132.
  256. 133.
  257.         C'est pas une bonne idee de mettre le strlen() dans la boucle.
  258. 134.
  259.         Il est evalue a chaque fois, alors qu'ici, il est invariant...
  260. 135.
  261.         */ J'ai alors juste a l'enregistre dans une variable avant la boucle ?
  262. 136.
  263.         {
  264. 137.
  265.            int const n = strlen(Mot);
  266. 138.
  267.            int i;
  268. 139.
  269.            for (i = 0; i < n; i++)
  270. 140.
  271.            {
  272. 141.
  273.               printf("*" );
  274. 142.
  275.            }
  276. 143.
  277.         }
  278. 144.
  279.      
  280. 145.
  281.         printf("\n\n" );
  282. 146.
  283.      
  284. 147.
  285.         while (Credit != 0 && Gagne != 0)
  286. 148.
  287.         {
  288. 149.
  289.      
  290. 150.
  291.            printf("Veuilez taper une lettre: " );
  292. 151.
  293.            MaLettre = lireCaractere();
  294. 152.
  295.      
  296. 153.
  297.            BonneLettre = strchr(Mot, MaLettre);
  298. 154.
  299.      
  300. 155.
  301.            if (BonneLettre != NULL)
  302. 156.
  303.            {
  304. 157.
  305.               printf("Bravo, %c se trouve bien dans le mot:\nIl vous reste toujours %d Vies:\n", MaLettre, Credit);
  306. 158.
  307.            }
  308. 159.
  309.            else
  310. 160.
  311.            {
  312. 161.
  313.               Credit--;
  314. 162.
  315.               printf("Desoler %c ne se trouve pas dans le mot:\nIl ne vous reste plus que %d Vies:\n", MaLettre, Credit);
  316. 163.
  317.            }
  318. 164.
  319.      
  320. 165.
  321.      
  322. 166.
  323.            {
  324. 167.
  325.               int const n = strlen(Mot);
  326. 168.
  327.               int i;
  328. 169.
  329.               for (i = 0; i < n; i++)
  330. 170.
  331.               {
  332. 171.
  333.                  CaractereTrouve = Mot[i];
  334. 172.
  335.      
  336. 173.
  337.                  if (MaLettre == CaractereTrouve)
  338. 174.
  339.                  {
  340. 175.
  341.                     MotTrouve[i] = CaractereTrouve;
  342. 176.
  343.      
  344. 177.
  345.                  }
  346. 178.
  347.               }
  348. 179.
  349.            }
  350. 180.
  351.      
  352. 181.
  353.            MotTrouve[strlen(Mot)] = '\0';
  354. 182.
  355.            printf("\n%s", MotTrouve);
  356. 183.
  357.            printf("\n\n" );
  358. 184.
  359.            Gagne = strcmp(Mot, MotTrouve);
  360. 185.
  361.         }
  362. 186.
  363.      
  364. 187.
  365.      
  366. 188.
  367.      
  368. 189.
  369.         if (Credit == 0)
  370. 190.
  371.         {
  372. 191.
  373.            printf("Il ne vous reste plus de vie, Vous avez perdu.... pfff le mot etait bien:  %s\n\n", Mot);
  374. 192.
  375.         }
  376. 193.
  377.         else if (Gagne == 0)
  378. 194.
  379.         {
  380. 195.
  381.            printf("Bravo, vous avez gagne le mot etait bien:  %s\n\n", Mot);
  382. 196.
  383.         }
  384. 197.
  385.      
  386. 198.
  387.         system("PAUSE" );
  388. 199.
  389.         return 0;
  390. 200.
  391.       } [i]



 
 
Voila j'ai effectuer la plupart des modification mais l'erreur subsite, j'ai aussi des questions quand a vos commentaire sur mon code. Je vous remercie.

Reply

Marsh Posté le 08-03-2006 à 19:54:20   

Reply

Marsh Posté le 08-03-2006 à 20:12:40    


Citation :

          fgets(Mot, 50, Dictionnaire);
            /* -ed-
            BUG!
            Tu as menti a ton compilateur. C'est pas 50, c'est sizeof Mot, et ca fait  1 !
            Comportement indefini.
            */     Desole je ne comprends pas ici ton commentaire, j'ai mis 50 car je ne connais pas la taille de tout les mot de mon dictionnaire, je le met donc a 50 pour qu'il lise au maximum 50 caracteres par ligne, si je le mettais a sizeof Mot ca cree une erreur.


Ben oui, parce que Mot est trop petit  

char Mot[] = "";


si tu veux qu'il accepte 50 char, il faut le définir en conséquence :  

  char Mot[50];
   ...
   fgets(Mot, sizeof Mot, Dictionnaire);


Citation :


        /* -ed-
        for(int i=0; i < strlen(Mot); i++)
        Cette forme n'est pas supportee en C90
        C'est pas une bonne idee de mettre le strlen() dans la boucle.
        Il est evalue a chaque fois, alors qu'ici, il est invariant...
        */ J'ai alors juste a l'enregistre dans une variable avant la boucle ?


Oui.
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 08-03-2006 à 20:21:12    

Merci enormement c'est parfait ca a resolu mon probleme !! ^^.
Le fait de cree un Tableau de 50 ca gaspille pas de la memoire ? parce que meme en important le mot du dictionnaire mon tableau mot Prend toujours 50 adresse de memoire ?  
En tout cas merci enormemant j'etais perdu je vais me mettre au vrai c++ maitenant avec les classes et le SDL ^^

Reply

Marsh Posté le 08-03-2006 à 20:25:15    

kirua_sama a écrit :

Le fait de cree un Tableau de 50 ca gaspille pas de la memoire ? parce que meme en important le mot du dictionnaire mon tableau mot Prend toujours 50 adresse de memoire ?  


De toutes façons, tu n'as pas le choix, ou alors utilises des mots plus petits, parce que à part en chimie ou en pharmacie, les mots de plus 26 lettres (anticonstitutionnellement), c'est assez rare en français...


Message édité par Emmanuel Delahaye le 08-03-2006 à 21:04:04

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 08-03-2006 à 20:28:00    

Citation :

En tout cas merci enormemant j'etais perdu je vais me mettre au vrai c++ maitenant avec les classes et le SDL ^^


 
en bossant serrieusement t'es partie pour des mois, tu peux deja oublier tes projets sdl et autre
 

Citation :

Le fait de cree un Tableau de 50 ca gaspille pas de la memoire ?


 
si tu veut stocker une chaine qui fait jusqu'a 50 caracteres, soit tu déclares un tableau de 50+1 (gaspillage mais pas prise de tete) soit tu déclares un pointeur de caractere et tu lui affecte ulterieurement l'adresse d'une zone mémoire allouée dynamiquement

Reply

Marsh Posté le 08-03-2006 à 21:04:40    

oki merci beaucoup tout le monde ^^.  
 

Citation :

en bossant serrieusement t'es partie pour des mois, tu peux deja oublier tes projets sdl et autre


Pourquoi ?

Reply

Marsh Posté le 08-03-2006 à 21:05:42    

kirua_sama a écrit :

oki merci beaucoup tout le monde ^^.  
 

Citation :

en bossant serrieusement t'es partie pour des mois, tu peux deja oublier tes projets sdl et autre


Pourquoi ?


Le C++, c'est énorme. Pourquoi tu veux faire du C++ ?


Message édité par Emmanuel Delahaye le 08-03-2006 à 23:03:57

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 08-03-2006 à 21:16:02    

bah en fait j'ai fait du xhtml css et php pour mon site et la petit a petit j'aimerais bien realise un jeu... que je gere moi meme et puis le c++ permet de tout faire alors je voudrais l'apprendre. (Pour le jeu je sais que c'est un un travail monstrueux, il existe aussi des logiciels tout fait pour en realise, mais j'aimerais tout de même le faire a partir du c++, ca me permettra de joindre ensuite le c#). Et puis j'hesite encores mais peut-etre que j'aimerais bien faire de mon metier celui de programmer.

Reply

Marsh Posté le 08-03-2006 à 23:02:58    

bordel el rapport en C++ et XHTML/CSS [:dawa]

Reply

Marsh Posté le 09-03-2006 à 17:02:59    

bah nan mais c'etait pour parle du php ... et c'etait pour dire ke j'apprend en vu d'un projet.

Reply

Sujets relatifs:

Leave a Replay

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