Se connecter / S'enregistrer

Résolu Plantage programme C desespéré

Solutions (106)
Tags :
  • Programme
  • Programmation
|
Bonjour,

Voila pour un projet que je réalise j'ai besoin d'utiliser la fonction de piocher aléatoirement un mot dans un fichier texte et de le comparer a un autre mais pour l'instant j'ai un soucis avec la fonction de piocher aléatoirement


Fichier main.c
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <ctype.h>
  4. #include <string.h>
  5. #include "cours1.h"
  6. #include "cours2.h"
  7. int rechercheLettre(char lettre, char MotPiocher[], int lettreTrouvee[]);
  8.  
  9. int main(int argc, char* argv[])
  10. {
  11. int *lettreTrouveeHCoursM1 = NULL;
  12. int *lettreTrouveeHCoursM2 = NULL;
  13. //int *lettreTrouveeHCoursM3 = NULL;
  14. //int *lettreTrouveeHCoursM4 = NULL;
  15. //int *lettreTrouveeHCoursM5 = NULL;
  16. char MotPiocher[100] = {0}; // L'horaire du cours1.
  17. char Cours2[100] = {0}; // L'horaire du cours2.
  18. /*char Cours3[100] = {0}; // L'horaire du cours3.
  19. char Cours4[100] = {0}; // L'horaire du cours4.
  20. char Cours5[100] = {0}; // L'horaire du cours5.*/
  21. long tailleMotHCoursM1 = 0;
  22. long tailleMotHCoursM2 = 0;
  23. /*long tailleMotHCoursM3 = 0;
  24. long tailleMotHCoursM4 = 0;
  25. long tailleMotHCoursM5 = 0;*/
  26.  
  27.  
  28. printf("Bienvenue dans le generateur d'emplois du temps !\n\n");
  29.  
  30. if (!PiocherCoursMaths1(MotPiocher))
  31. printf ("NUL");
  32. system ("PAUSE");
  33. exit(0);
  34.  
  35. tailleMotHCoursM1 = strlen(MotPiocher);
  36.  
  37. lettreTrouveeHCoursM1 = malloc(tailleMotHCoursM1 * sizeof(int)); // On alloue dynamiquement le tableau lettreTrouvee (dont on ne connaissait pas la taille au départ)
  38. if (lettreTrouveeHCoursM1 == NULL)
  39. printf("Null");
  40. exit(0);
  41.  
  42. if (!PiocherCoursMaths2(Cours2))
  43. printf("Null");
  44. exit(0);
  45.  
  46. tailleMotHCoursM2 = strlen(Cours2);
  47.  
  48. lettreTrouveeHCoursM2 = malloc(tailleMotHCoursM2 * sizeof(int)); // On alloue dynamiquement le tableau lettreTrouvee (dont on ne connaissait pas la taille au départ)
  49. if (lettreTrouveeHCoursM2 == NULL)
  50. exit(0);
  51.  
  52. if (lettreTrouveeHCoursM1 != lettreTrouveeHCoursM2) {
  53. printf ("Les variables sont différentes");
  54. }
  55. free(lettreTrouveeHCoursM1);
  56. free(lettreTrouveeHCoursM2); // On libère la mémoire allouée manuellement
  57. return 0;
  58. }


Fichier cours1.c
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <string.h>
  5. #include "cours1.h"
  6.  
  7.  
  8. int PiocherCoursMaths1(char *MotHeureCours1)
  9. {
  10. FILE* Cours1 = NULL; // Le pointeur de fichier qui va contenir notre fichier
  11. int nombreMotsCoursM1 = 0, numMotChoisiCoursM1 = 0, i = 0;
  12. int caractereLuCoursM1 = 0;
  13. Cours1 = fopen("Cours1.txt", "r"); // On ouvre le fichier qui contient les horaires du cours1 en lecture seule
  14.  
  15. // On vérifie si on a réussi à ouvrir le fichier
  16. if (Cours1 == NULL) // Si on n'a PAS réussi à ouvrir le fichier
  17. {
  18. printf("\nImpossible de charger le fichier cours1.txt");
  19. return 0; // On retourne 0 pour indiquer que la fonction a échoué
  20. // A la lecture du return, la fonction s'arrête immédiatement.
  21. }
  22.  
  23. // On compte le nombre de mots dans le fichier (il suffit de compter les
  24. // entrées \n
  25. do
  26. {
  27. caractereLuCoursM1 = fgetc(Cours1);
  28. if (caractereLuCoursM1 == '\n')
  29. nombreMotsCoursM1;
  30. } while(caractereLuCoursM1 != EOF);
  31.  
  32. numMotChoisiCoursM1 = NombreAleatoireHCoursM1(nombreMotsCoursM1); // On pioche un mot au hasard
  33.  
  34. // On recommence à lire le fichier depuis le début. On s'arrête lorsqu'on est arrivés au bon mot
  35. rewind(Cours1);
  36. while (numMotChoisiCoursM1 > 0)
  37. {
  38. caractereLuCoursM1 = fgetc(MotHeureCours1);
  39. if (caractereLuCoursM1 == '\n')
  40. numMotChoisiCoursM1--;
  41. }
  42.  
  43. /* Le curseur du fichier est positionné au bon endroit.
  44. On n'a plus qu'à faire un fgets qui lira la ligne */
  45. fgets(MotHeureCours1, 100, Cours1);
  46.  
  47. // On vire l'\n à la fin
  48. MotHeureCours1[strlen(MotHeureCours1) - 1] = '\0';
  49. fclose(Cours1);
  50.  
  51. return 1; // Tout s'est bien passé, on retourne 1
  52. }
  53.  
  54. int NombreAleatoireHCoursM1(int nombreMaxCoursM1)
  55. {
  56. srand(time(NULL));
  57. return (rand() % nombreMaxCoursM1);
  58. }


Fichier cours2.c
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <string.h>
  5. #include "cours2.h"
  6.  
  7.  
  8. int PiocherCoursMaths2(char *HeureCours2)
  9. {
  10. FILE* Cours2 = NULL; // Le pointeur de fichier qui va contenir notre fichier
  11. int nombreMotsCoursM2 = 0, numMotChoisiCoursM2 = 0, i = 0;
  12. int caractereLuCoursM2 = 0;
  13. Cours2 = fopen("Cours2.txt", "r"); // On ouvre le fichier qui contient les horaires du cours1 en lecture seule
  14.  
  15. // On vérifie si on a réussi à ouvrir le fichier
  16. if (Cours2 == NULL) // Si on n'a PAS réussi à ouvrir le fichier
  17. {
  18. printf("\nImpossible de charger le fichier cours2.txt");
  19. return 0; // On retourne 0 pour indiquer que la fonction a échoué
  20. // A la lecture du return, la fonction s'arrête immédiatement.
  21. }
  22.  
  23. // On compte le nombre de mots dans le fichier (il suffit de compter les
  24. // entrées \n
  25. do
  26. {
  27. caractereLuCoursM2 = fgetc(Cours2);
  28. if (caractereLuCoursM2 == '\n')
  29. nombreMotsCoursM2++;
  30. } while(caractereLuCoursM2 != EOF);
  31.  
  32. numMotChoisiCoursM2 = NombreAleatoireHCoursM2(nombreMotsCoursM2); // On pioche un mot au hasard
  33.  
  34. // On recommence à lire le fichier depuis le début. On s'arrête lorsqu'on est arrivés au bon mot
  35. rewind(Cours2);
  36. while (numMotChoisiCoursM2 > 0)
  37. {
  38. caractereLuCoursM2 = fgetc(Cours2);
  39. if (caractereLuCoursM2 == '\n')
  40. numMotChoisiCoursM2--;
  41. }
  42.  
  43. /* Le curseur du fichier est positionné au bon endroit.
  44. On n'a plus qu'à faire un fgets qui lira la ligne */
  45. fgets(HeureCours2, 100, Cours2);
  46.  
  47. // On vire l'\n à la fin
  48. HeureCours2[strlen(HeureCours2) - 1] = '\0';
  49. fclose(Cours2);
  50.  
  51. return 1; // Tout s'est bien passé, on retourne 1
  52. }
  53.  
  54. int NombreAleatoireHCoursM2(int nombreMaxCoursM2)
  55. {
  56. srand(time(NULL));
  57. return (rand() % nombreMaxCoursM2);
  58. }


Fichier cours1.h
  1. #ifndef DEF_COURS1
  2. #define DEF_COURS1
  3.  
  4.  
  5. int PiocherCoursMaths1(char *HeureCours1);
  6. int NombreAleatoireHCoursM1(int nombreMaxCoursM1);
  7.  
  8. #endif


Fichier cours2.h
  1. #ifndef DEF_COURS2
  2. #define DEF_COURS2
  3.  
  4.  
  5. int PiocherCoursMaths2(char *HeureCours2);
  6. int NombreAleatoireHCoursM2(int nombreMaxCoursM2);
  7.  
  8. #endif



C'est pourtant bète mais je n'y arrive pas. . . Aider moi s'il vous plait. . . Je m'arrache les cheveux

Merci d'avance
Contenus similaires
Meilleure solution
partage
|
Si tu as deux fichiers différents, fais passer le nom en paramètre de ta fonction.

  1. while (strcmp(MotPiocher1, MotPiocher2) == 0);

si strcmp == 0, c'est identique, alors tu refais une boucle.
  • Commenter cette solution |
Score
0
òh
òi
|
C'est bon j'ai virer ce truc je n'ai plus de soucis de ce coté la par contre j'en ai un autre.

Un de mes fichier .c c'est n'est pas exécuter
C'est la Francais1.c il n'est pas du tout lancer donc ca fais que je n'ai pas d'heure pour celui ci comme ca ne se lance pas




EDIT : J'ai réparer le soucis ;) 


Un Grand Merci a toi pour toute l'aide que tu m'a fourni et tout ce que j'ai appris aussi =D
  • Commenter cette réponse |
Score
0
òh
òi
|
avec ça: HeureMaths1[strlen(HeureMaths1) - 1] = '\n';
Tu remplaces le \0 de fin de chaine par un \n, puisque le strlen se base sur le \0 (normal).
  • Commenter cette réponse |
Score
0
òh
òi
|
je ne l'enlève pas ?
  • Commenter cette réponse |
Score
0
òh
òi
|
Tu n'enlèves pas le \n, tu en ajoutes un...
  • Commenter cette réponse |
Score
0
òh
òi
|
HeureMaths1[strlen(HeureMaths1) - 1] = '\n';


Ici je vire bien le \n de la fin mais je n'arrive pas a voir comment je pourrais l'enlever, mon algo n'as pas de souci du moins je n'en voit guère. Aucun \n ne devrais être stocker dans les chaines de caractère. a moins que quand ca pioche et que ca mets dans ma variable le \n reviens ?
  • Commenter cette réponse |
Score
0
òh
òi
|
Vérifie bien ton algo alors.
  • Commenter cette réponse |
Score
0
òh
òi
|
Ah oui.. . Arf je le retire comment celui la ? Pourtant je l'ai déjà retirer en le piochant aléatoirement =/
  • Commenter cette réponse |
Score
0
òh
òi
|
c'est parce que tu as toujours un \n dans ta variable.
  • Commenter cette réponse |
Score
0
òh
òi
|
C'est bon ca je l'ai corriger tout s'affiche correctement etc. Mais le soucis c'est que quand je les affiche j'ai un retour a la ligne juste après la variable
  • Commenter cette réponse |
Score
0
òh
òi
|
Oui, pour la raison que j'ai indiquée. Dans la fonction cmp, tes nouvelles variables ne sont pas déclarées.
  • Commenter cette réponse |
Score
0
òh
òi
|
euh par contre c'est normale que quand j'affiche une chaine de caractère il y est un retour a la ligne qui se produit ?

  1. printf ("La classe 1 aura Mahts a : %s heure, Francais a %s heure, Histoire a %s heure\n", HeureMaths1, HeureFrancais1, HeureHistoire1);
  2.  
  3. printf ("La classe 2 aura Mahts a : %s heure, Francais a %s heure, Histoire a %s heure\n", HeureMaths2, HeureFrancais2, HeureHistoire2);
  4.  
  5. printf ("La classe 3 aura Mahts a : %s heure, Francais a %s heure, Histoire a %s heure\n", HeureMaths3, HeureFrancais3, HeureHistoire3);
  • Commenter cette réponse |
Score
0
òh
òi
|
euhhh j'espère tu as pas vu je l'ai pas déclaré dans le int de la fonction =$
  • Commenter cette réponse |
Score
0
òh
òi
|
HeureFrancais1 n'est pas déclaré, pour l'un des cas suivants:
- ce n'est pas une variable locale
- ce n'est pas un paramètre de fonction courante
- ce n'est pas une variable globale (externe ou non)

J'imagine que tu veux le faire passer en paramètre.
  • Commenter cette réponse |
Score
0
òh
òi
|
  1. int cmp(const char *HeureMaths1, const char *HeureMaths2, const char *HeureMaths3, const char *HeureHistoire1, const char *HeureHistoire2, const char *HeureHistoire3)
  2. {
  3. unsigned int i = 0;
  4. for (i = 0; HeureMaths1[i] != '\0' && HeureMaths2[i] != '\0' && HeureMaths1[i] == HeureMaths2[i] && HeureMaths3[i] != '\0' && HeureMaths1[i] == HeureMaths3[i] && HeureHistoire1[i] != '\0' && HeureHistoire2[i] != '\0' && HeureHistoire1[i] == HeureHistoire2[i] && HeureHistoire3[i] != '\0' && HeureHistoire1[i] == HeureHistoire3[i] && HeureFrancais1[i] != '\0' && HeureFrancais2[i] != '\0' && HeureFrancais1[i] == HeureFrancais2[i] && HeureFrancais3[i] != '\0' && HeureFrancais1[i] == HeureFrancais3[i]; i++);
  5. if (HeureMaths1[i] != HeureMaths2[i] && HeureMaths1[i] != HeureMaths3[i] && HeureMaths2[i] != HeureMaths3[i] && HeureHistoire1[i] != HeureHistoire2[i] && HeureHistoire1[i] != HeureHistoire3[i] && HeureHistoire2[i] != HeureHistoire3[i] && HeureFrancais1[i] != HeureFrancais2[i] && HeureFrancais1[i] != HeureFrancais3[i] && HeureFrancais2[i] != HeureFrancais3[i])
  6. return 0;
  7.  
  8. return -1;
  9. }


Et voila ca recommence il me dit que les variable ne sont pas déclaré T.T
  • Commenter cette réponse |
Score
0
òh
òi
|
Merci beaucoup. . .

Alors la serieux c'est déprimant T.T

Une parenthèse en trop j'y crois pas ca fais deux jours je cherche j'ai repassé trois fois mon programme par jours arf' !

Enfin merci j'ai compris le truc je vais pouvoir finir cela ;) 
  • Commenter cette réponse |
Score
0
òh
òi
|
OK, dans le for, tu as fermé 2 fois la parenthèse.
  • Commenter cette réponse |
Score
0
òh
òi
|
C:\Documents and Settings\Baptiste\Bureau\Emploi du temps\Emploi du temps C\main.c In function `cmp':

15 C:\Documents and Settings\Baptiste\Bureau\Emploi du temps\Emploi du temps C\main.c syntax error before ')' token

C:\Documents and Settings\Baptiste\Bureau\Emploi du temps\Emploi du temps C\Makefile.win [Build Error] [main.o] Error 1


Il me mets plus le too few argument bizarre
  • Commenter cette réponse |
Score
0
òh
òi
|
Envoie le message exact et la ligne qui pose problème. :) 
  • Commenter cette réponse |
Score
0
òh
òi
|
euh il me dit qu'il y a trop d'argument et je m'arrête à 15 xD
  • Commenter cette réponse |
Score
0
òh
òi
|
Et tu vas t'arrêter où comme ça? :D 

Dans ton for, je vois bien 6 '\0', mais je ne vois que 4 ==. Il t'en manque un.

Sinon quelle est ta première erreur exactement ?
  • Commenter cette réponse |
Score
0
òh
òi
|
Grrr j'arrive pas a comparer 6 chaines de caractère il ne veut pas il me dit qu'il y a trop d'argument et me trouve pleins d'erreur =( Je crois que ce n'est pas fini je n'arrive pas a ajouter des nouvelles chaines en gros

main.c

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include "Maths1.h"
  5. #include "Maths2.h"
  6. #include "Maths3.h"
  7. #include "Histoire1.h"
  8. #include "Histoire1.h"
  9. #include "Histoire1.h"
  10.  
  11.  
  12. int cmp(const char *HeureMaths1, const char *HeureMaths2, const char *HeureMaths3, const char *HeureHistoire1, const char *HeureHistoire2, const char *HeureHistoire3)
  13. {
  14. unsigned int i = 0;
  15. for (i = 0; HeureMaths1[i] != '\0' && HeureMaths2[i] != '\0' && HeureMaths1[i] == HeureMaths2[i] && HeureMaths3[i] != '\0' && HeureMaths1[i] == HeureMaths3[i] && HeureHistoire1[i] != '\0' && HeureHistoire2[i] != '\0' && HeureHistoire1[i] == HeureHistoire2[i] && HeureHistoire3[i] != '\0' && HeureHistoire1[i] == HeureHistoire3[i]; i++));
  16. if (HeureMaths1[i] != HeureMaths2[i] && HeureMaths1[i] != HeureMaths3[i] && HeureMaths2[i] != HeureMaths3[i] && HeureHistoire1[i] != HeureHistoire2[i] && HeureHistoire1[i] != HeureHistoire3[i] && HeureHistoire2[i] != HeureHistoire3[i])
  17. return 0;
  18.  
  19. return -1;
  20. }
  21.  
  22. int main(int argc, char* argv[])
  23. {
  24. char HeureMaths1[100] = {0}; // L'horaire du cours de maths de la classe1.
  25. char HeureMaths2[100] = {0}; // L'horaire du cours de maths de la classe2.
  26. char HeureMaths3[100] = {0}; // L'horaire du cours de maths de la classe3.
  27. char HeureMaths4[100] = {0}; // L'horaire du cours de maths de la classe4.
  28. char HeureMaths5[100] = {0}; // L'horaire du cours de maths de la classe5.
  29. char HeureHistoire1[100] = {0}; // L'horaire du cours de maths de la classe1.
  30. char HeureHistoire2[100] = {0}; // L'horaire du cours de maths de la classe2.
  31. char HeureHistoire3[100] = {0}; // L'horaire du cours de maths de la classe3.
  32. char HeureHistoire4[100] = {0}; // L'horaire du cours de maths de la classe4.
  33. char HeureHistoire5[100] = {0}; // L'horaire du cours de maths de la classe5.
  34.  
  35. printf("Bienvenue dans le generateur d'emplois du temps !\n\n");
  36. srand(time(NULL));
  37. do
  38. {
  39. if (!PiocherCoursMaths1(HeureMaths1)) // on appel la fonction qui génère un mot aléatoire et est stocker dans l'heure de maths de la classe1
  40. exit(0); //Si on a pas réussi on quitte.
  41. printf("HeureMaths1 %s", HeureMaths1); //affiche l'horaire de maths de la classe1
  42.  
  43. if (!PiocherCoursMaths2(HeureMaths2))// on appel la fonction qui génère un mot aléatoire et est stocker dans l'heure de maths de la classe2
  44. exit(0);
  45. printf("HeureMaths2 %s", HeureMaths2); //affiche l'horaire de maths de la classe2
  46.  
  47. if (!PiocherCoursMaths3(HeureMaths3)) // on appel la fonction qui génère un mot aléatoire et est stocker dans l'heure de maths de la classe1
  48. exit(0); //Si on a pas réussi on quitte.
  49. printf("HeureMaths3 %s", HeureMaths3); //affiche l'horaire de maths de la classe1
  50.  
  51. if (!PiocherCoursHistoire1(char *HeureHistoire1))
  52. exit(0);
  53. printf("HeureHistoire1 %s", HeureHistoire1);
  54.  
  55. if (!PiocherCoursHistoire2(char *HeureHistoire2))
  56. exit(0);
  57. printf("HeureHistoire2 %s", HeureHistoire2);
  58.  
  59. if (!PiocherCoursHistoire2(char *HeureHistoire3))
  60. exit(0);
  61. printf("HeureHistoire3 %s", HeureHistoire3);
  62.  
  63. }while (cmp(HeureMaths1,HeureMaths2,HeureMaths3,HeureHistoire1,HeureHistoire2,HeureHistoire3) != 0);
  64.  
  65.  
  66. system ("PAUSE");
  67. return 0;
  68. }
  • Commenter cette réponse |
Score
0
òh
òi
|
Merci beaucoup =D

Ça va m'être utile je développerais ce programme sous une vrai fenêtre pour la présentation =d
  • Commenter cette réponse |
Score
0
òh
òi
|
La win32 API n'est qu'une bibliothèque pour accéder aux fonctionnalités de l'OS. Tu as programmé en C standard, donc tu peut effectivement reprendre tes fonctions.
  • Commenter cette réponse |
Score
0
òh
òi
|
Une question avant de te quitter.

Je devrais commencer a programmer après cela en APIWin 32 est-ce que le code que j'ai la pourras être coller directement dans la programmation ?
  • Commenter cette réponse |
Score
0
òh
òi
|
C'est bon j'ai réussi ! Ca marche a tout les coups si une chaine est égal a une autre la boucle s'effectue bien ! =D
  • Commenter cette réponse |
Score
0
òh
òi
|
Si tu veux les 3 chaines toutes différentes, il te suffit de changer le if et tester si les 3 sont toutes différentes.
  • Commenter cette réponse |
Score
0
òh
òi
|
Ah bah d'accord j'comprend mieux merci beaucou je test ça.


Bon alors ca ne fonctionne pas.

La boucle s'effectue bien mais par contre j'ai un soucis elle ne s'effectue quand quand les 3 chaine sont égal pas quand deux chaines sont égal par exemple =(
  • Commenter cette réponse |
Score
0
òh
òi
|
  1. if (HeureMaths1[i] == HeureMaths2[i] && HeureMaths1[i] == HeureMaths3[i] && HeureMaths2[i] == HeureMaths3[i])
  2. printf("%s\n%s\n%s", HeureMaths1, HeureMaths2, HeureMaths3);
  3. return 0;

Ton printf fait tout foirer. :) 
Comme dans le if, tu n'a pas mis d'accolades, le "return 0;" n'est plus dans le if.

  1. if (HeureMaths1[i] == HeureMaths2[i] && HeureMaths1[i] == HeureMaths3[i] && HeureMaths2[i] == HeureMaths3[i])
  2. {
  3. printf("%s\n%s\n%s", HeureMaths1, HeureMaths2, HeureMaths3);
  4. return 0;
  5. }

  • Commenter cette réponse |
Score
0
òh
òi
|
J'ai a peu près tout essayer changer un peu des truc dans la fonction j'ai essayer de changer le while et rien a faire =(
  • Commenter cette réponse |
Score
0
òh
òi
|
J'ai réussi dans le sens inverse. J'ai réussi a tout faire pour qu'il soit égaux. La boucle redémarre infiniment et s'il sont égaux ca s'arrête
  • Commenter cette réponse |
Score
0
òh
òi
|
D'accord je vens de comprendre coment faire !


Je comprend vite mais après une longue explication :lol: 


Bon j'ai essayé la boulce infini c'est pas mon truc qu'elle est les ocuis ? Il regénère toujours le projet de l'aléatoire.

main.c

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include "Maths1.h"
  5. #include "Maths2.h"
  6. #include "Maths3.h"
  7.  
  8. int cmp(const char *HeureMaths1, const char *HeureMaths2, const char *HeureMaths3)
  9. {
  10. unsigned int i = 0;
  11. for (i = 0; HeureMaths1[i] != '\0' && HeureMaths2[i] != '\0' && HeureMaths1[i] == HeureMaths2[i] && HeureMaths3[i] != '\0' && HeureMaths1[i] == HeureMaths3[i]; i++);
  12. if (HeureMaths1[i] == HeureMaths2[i] && HeureMaths1[i] == HeureMaths3[i] && HeureMaths2[i] == HeureMaths3[i])
  13. printf("%s\n%s\n%s", HeureMaths1, HeureMaths2, HeureMaths3);
  14. return 0;
  15. printf("%s\n%s\n%s", HeureMaths1, HeureMaths2, HeureMaths3);
  16. return -1;
  17. }
  18.  
  19. int main(int argc, char* argv[])
  20. {
  21. char HeureMaths1[100] = {0}; // L'horaire du cours de maths de la classe1.
  22. char HeureMaths2[100] = {0}; // L'horaire du cours de maths de la classe2.
  23. char HeureMaths3[100] = {0}; // L'horaire du cours de maths de la classe3.
  24. char HeureMaths4[100] = {0}; // L'horaire du cours de maths de la classe4.
  25. char HeureMaths5[100] = {0}; // L'horaire du cours de maths de la classe5.
  26.  
  27. printf("Bienvenue dans le generateur d'emplois du temps !\n\n");
  28. srand(time(NULL));
  29. do
  30. {
  31. if (!PiocherCoursMaths1(HeureMaths1)) // on appel la fonction qui génère un mot aléatoire et est stocker dans l'heure de maths de la classe1
  32. exit(0); //Si on a pas réussi on quitte.
  33. printf("HeureMaths1 %s", HeureMaths1); //affiche l'horaire de maths de la classe1
  34.  
  35. if (!PiocherCoursMaths2(HeureMaths2))// on appel la fonction qui génère un mot aléatoire et est stocker dans l'heure de maths de la classe2
  36. exit(0);
  37. printf("HeureMaths2 %s", HeureMaths2); //affiche l'horaire de maths de la classe2
  38.  
  39. if (!PiocherCoursMaths3(HeureMaths3)) // on appel la fonction qui génère un mot aléatoire et est stocker dans l'heure de maths de la classe1
  40. exit(0); //Si on a pas réussi on quitte.
  41. printf("HeureMaths3 %s", HeureMaths3); //affiche l'horaire de maths de la classe1
  42. }while (cmp(HeureMaths1,HeureMaths2,HeureMaths3) == 0);
  43.  
  44.  
  45. system ("PAUSE");
  46. return 0;
  47. }
  • Commenter cette réponse |
Score
0
òh
òi
|
Change le nom de la fonction pour bien différencier avec le strcmp normal.
  • Commenter cette réponse |
Score
0
òh
òi
|
Il me dit qu'il y a trop d'argument T.T
  • Commenter cette réponse |
Score
0
òh
òi
|
Alors tu n'as qu'à boucler tant que les 3 sont égaux (while (strcmp(...) == 0))
  • Commenter cette réponse |
Score
0
òh
òi
|
:lol: 
Bah en faite, la le programme tire mot aléatoirement dans mes fichier texte. J'aimerais que si ils sont identiques que le programme recommence a en tiré trois aléatoirement et ce jusqu'à temps qu'ils soient différent.

As tu compris cela?
  • Commenter cette réponse |
Score
0
òh
òi
|
Oui, mais je sais pas ce que tu veux en faire. :D 
  • Commenter cette réponse |
Score
0
òh
òi
|
je ne vois pas quoi mettre dans les paramètre du while ? Ma fonction ?

(Je le replace comme avant ?)
  • Commenter cette réponse |
Score
0
òh
òi
|
oui avec tes 3 paramètre. Si tu enlèves le while, tu enlève la boucle sur les noms équivalents.
  • Commenter cette réponse |
Score
0
òh
òi
|
J'ai enlever le while il faudrait donc que je le remette ? Comme avant mais avec les paramètre différent ?
  • Commenter cette réponse |
Score
0
òh
òi
|
Comment as-tu fait ton while ?
  • Commenter cette réponse |
Score
0
òh
òi
|
La fonction ne s'execute pas a piori.

En faite ca tire bien aléatoirement et autre mais par contre quand deux chaines ou les trois sont identiques ca ne retire pas aléatoirement d'autre chaine
  • Commenter cette réponse |
Score
0
òh
òi
|
C'est quoi le problème alors ?
  • Commenter cette réponse |
Score
0
òh
òi
|
Les valeurs ne s'affiche pas =/

Il ne me marque rien dans la fonction =(

Comment cela ce fait il ?
  • Commenter cette réponse |
Score
0
òh
òi
|
Affiche les valeurs pour voir ce qu'il se passe.
  • Commenter cette réponse |
Score
0
òh
òi
|
  1. int strcmp(const char *HeureMaths1, const char *HeureMaths2, const char *HeureMaths3)
  2. {
  3. unsigned int i = 0;
  4. for (i = 0; HeureMaths1[i] != '\0' && HeureMaths2[i] != '\0' && HeureMaths1[i] == HeureMaths2[i] && HeureMaths3[i] != '\0' && HeureMaths1[i] == HeureMaths3[i]; i++);
  5. if (HeureMaths1[i] == HeureMaths2[i] && HeureMaths1[i] == HeureMaths3[i] && HeureMaths2[i] == HeureMaths3[i])
  6. return 0;
  7.  
  8. return -1;
  9. }


Même avec cela ca ne fonctionne pas
  • Commenter cette réponse |
Score
0
òh
òi
|
Toi tu as ça:
if (HeureMaths1 == HeureMaths2[1] && HeureMaths1 == HeureMaths3[1] && HeureMaths2 == HeureMaths3)
Et ce n'est pas bon.
  • Commenter cette réponse |
Score
0
òh
òi
|
donc mon code semble bon puisque j'ai cela ?

Alors comment ce fais il que j'ai toujours des soucis ? il ne relance pas de recherche pour retiré aléatoirement et trouver de nouvelle chaine jusqu'à ce soit différent.
  • Commenter cette réponse |
Score
0
òh
òi
|
La boucle du for s'arrête soit lorsque toutes les chaines ont été lues, soit lorsqu'une différence a été trouvée.
En retestant le dernier caractère testé, on sait si on a arrété parcequ'on est arrivé à la fin (des \0 partout):
  1. if (HeureMaths1[i] == HeureMaths2[i] && HeureMaths1[i] == HeureMaths3[i] && HeureMaths2[i] == HeureMaths3[i])
  2. return 0;
  • Commenter cette réponse |
Afficher plus de solutions

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS