[C] Ecriture dans un fichier

Ecriture dans un fichier [C] - C - Programmation

Marsh Posté le 15-01-2010 à 14:48:31    

PROBLEME RESOLU
NOUVEAU PROBLEME UN PEU PLUS BAS

 

Bonjour.
Dans le cadre de mes études, je suis actuellement sur un projet de puissance 4 en c seulement je coince un peu au niveau de la sauvegarde dans un fichier de la grille du puissance 4.
Voici le code sans appel de la fonction initialiserJeu():

 
Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include "main.h"
  4. void sauvegarder(){
  5. int i,j;
  6. char jeu[7][6];
  7. for(i=0;i<7;i++){
  8.  for(j=0;j<6;j++){
  9.   jeu[i][j]='.';
  10.  }
  11. }
  12. FILE* fichier = NULL;
  13. fichier = fopen("puissance4.txt", "r+" );
  14. if (fichier != NULL){
  15.  fprintf(fichier,"|---|---|---|---|---|---|---|\n" );
  16.  for(j=5;j>=0;j--){
  17.   for(i=0;i<7;i++){                 
  18.    fprintf(fichier,"| %c ",jeu[i][j]);
  19.   }
  20.   fprintf(fichier,"|\n" );
  21.   fprintf(fichier,"|---|---|---|---|---|---|---|\n" );
  22.  }
  23.  fprintf(fichier,"\n| 0 | 1 | 2 | 3 | 4 | 5 | 6 |\n\n" );
  24.  fclose(fichier);   
  25. }
  26. else{
  27.  printf("Impossible d'ouvrir le fichier test.txt" );
  28. }
  29. }
 

Je me retrouve avec un puissance4.txt contenant:

Code :
  1. |---|---|---|---|---|---|---|
  2. |   |   |   |   |   |   |   |
  3. |---|---|---|---|---|---|---|
  4. |   |   |   |   |   |   |   |
  5. |---|---|---|---|---|---|---|
  6. |   |   |   |   |   |   |   |
  7. |---|---|---|---|---|---|---|
  8. |   |   |   |   |   |   |   |
  9. |---|---|---|---|---|---|---|
  10. |   |   |   |   |   |   |   |
  11. |---|---|---|---|---|---|---|
  12. |   |   |   |   |   |   |   |
  13. |---|---|---|---|---|---|---|
  14. | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
 

Tout va bien seulement quand j'appelle la fonction initialiser jeu au lieu de la double boucle for je me retrouve avec:

 

|

Code :
  1. ---|---|---|---|---|---|---|
  2. |  |   | @ |   |  |   |  |
  3. |---|---|---|---|---|---|---|
  4. | s |   |   |   | k | ( | Ó |
  5. |---|---|---|---|---|---|---|
  6. | u |   |   |   |   | ÿ | u |
  7. |---|---|---|---|---|---|---|
  8. | ¬ |   |   |  | ( | Ä | § |
  9. |---|---|---|---|---|---|---|
  10. | h | ‹ |   |   | þ | ‹ | Œ |
  11. |---|---|---|---|---|---|---|
  12. | € | Ï |   |   | Ô | Ï | Õ |
  13. |---|---|---|---|---|---|---|
  14. | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
  

Voici la fonction initialiserJeu():

 
Code :
  1. #include <stdio.h>
  2. #include "main.h"
  3. char jeu[7][6];
  4. void initialiserJeu(){
  5. int i,j;
  6. /* Initialisation du tableau toutes les cases prennent la valeur " "*/
  7. for(i=0;i<7;i++){
  8.  for(j=0;j<6;j++){
  9.   jeu[i][j]=' ';
  10.  }
  11. }
  12. }
 


Merci d'avance


Message édité par Leilu le 15-01-2010 à 15:32:55
Reply

Marsh Posté le 15-01-2010 à 14:48:31   

Reply

Marsh Posté le 15-01-2010 à 14:50:18    

Dans le fichier qui contient initialiserJeu():, j'écrirais extern char jeu[7][6];, et je mettrais char jeu[7][6]; en variable globale (en dehors de la function sauvegarder()) dans l'autre programme ou l'inverse, mais je ne sais pas si c'est le problème. Ou mieux, je passerais le tableau en paramètre à la fonction sauvegarder.


Message édité par olivthill le 15-01-2010 à 14:56:52
Reply

Marsh Posté le 15-01-2010 à 14:59:22    

J'essaie mais je garantie pas que j'y arrive vu ma nullité.
 
EDIT: ca fonctionne merci
Passons à la lecture du fichier (je vais surement avoir besoin de vous).


Message édité par Leilu le 15-01-2010 à 15:01:45
Reply

Marsh Posté le 15-01-2010 à 15:21:48    

Bon ! Pour voir si le jeu se chargeait bien j'ai modifié à la main puissance4.txt comme suit (ca fait une belle grille en vrai :p):

Code :
  1. |---|---|---|---|---|---|---|
  2. |   |   |   |   |   |   |   |
  3. |---|---|---|---|---|---|---|
  4. |   |   |   |   |   |   |   |
  5. |---|---|---|---|---|---|---|
  6. |   |   |   |   |   |   |   |
  7. |---|---|---|---|---|---|---|
  8. |   |   |   |   |   |   |   |
  9. |---|---|---|---|---|---|---|
  10. |   | O |   |   |   |   |   |
  11. |---|---|---|---|---|---|---|
  12. | O | X |   |   |   |   |   |
  13. |---|---|---|---|---|---|---|
  14. | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
 

Seulement quand je charge le jeu j'obtiens une grille vide :s

 
Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include "main.h"
  4. void charger(int i,int j,char jeu[7][6]){
  5. FILE* fichier = NULL;
  6. fichier = fopen("puissance4.txt", "r+" );
  7. if (fichier != NULL){
  8.  printf("|---|---|---|---|---|---|---|\n" );
  9.  for(j=5;j>=0;j--){
  10.   for(i=0;i<7;i++){
  11.    fscanf(fichier, "| %c ",&jeu[i][j]);               
  12.    printf("| %c ",jeu[i][j]);
  13.   }
  14.   printf("|\n" );
  15.   printf("|---|---|---|---|---|---|---|\n" );
  16.  }
  17.  printf("\n| 0 | 1 | 2 | 3 | 4 | 5 | 6 |\n\n" );
  18.  fclose(fichier);
  19. }
  20. else{
  21.  // On affiche un message d'erreur
  22.  printf("Impossible d'ouvrir le fichier test.txt" );
  23. }
  24. }


Message édité par Leilu le 15-01-2010 à 15:23:08
Reply

Marsh Posté le 15-01-2010 à 16:51:39    

Bon j'ai changé complétement de méthode.
Au lieu de faire des fscanf, j'ai utilisé fgets et ca marche.

 
Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include "main.h"
  4. #define TAILLE_MAX 1000
  5. void charger(int i,int j,char jeu[7][6]){
  6.  
  7.    FILE* fichier = NULL;
  8.     char chaine[TAILLE_MAX] = "";
  9.     fichier = fopen("puissance4.txt", "r+" );
  10.     if (fichier != NULL)
  11.     {
  12.         while (fgets(chaine, TAILLE_MAX, fichier) != NULL) // On lit le fichier tant qu'on ne reçoit pas d'erreur (NULL)
  13.         {
  14.             printf("%s", chaine); // On affiche la chaîne qu'on vient de lire
  15.         }
  16.         fclose(fichier);
  17.     }
  18. }
 

Merci quand même.


Message édité par Leilu le 15-01-2010 à 16:52:25
Reply

Sujets relatifs:

Leave a Replay

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