Langage C, Probleme de concaténation

Résolu/Fermé
Pineau - 29 avril 2008 à 10:22
mamiemando Messages postés 33459 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 8 janvier 2025 - 29 avril 2008 à 20:13
Bonjour,

Je reviens encore vers vous car tous vos conseils m'ont été de grande utilité.
Mon programme touche a sa fin, il fonctionne tres bien dans son ensemble mais un soucis persiste encore.

En effet, dans ce programme j'envoie les données de trois tableaux sur un fichier texte (phase qui se passe tres bien), puis lors du redémarrage du programme je fais une lecture de ce fichier et ré-injecte les données dans mes trois tableaux (ce qui fonctionne aussi tres bien).

Cependant, lors de cette deuxieme phase si je modifie mes données une fois qu'elles ont été remises dans mes tableaux (ajout de données, suppression, ou modification), lors de la ré-écriture dans le fichier texte, les données se mettent bout a bout et non ligne par ligne. Au lieu d'avoir un fichier de ce genre :

1 9 Toto
2 8 Tata
9 5 Cazu
7 1 Pineau

Je me retrouve avec un fichier de ce genre (si j'ajoute 8 9 Manu) :

8 9 Manu
1 9 Toto2 8 Tata9 5 Cazu7 1 Pineau

J'ai un saut de ligne apres l'ajout que je viens de faire et le reste de l'ancien fichier se concatène. Pourtant c'est toujours la meme fonction que j'utilise pour entrer les données dans les tableaux, en ajouter et lécrire les données dans mon fichier.

Voila la fonction en question :

void affichage(int Inter[], int Prio[], int *i, int *var, char Tech[][20])
{
     int z=*i, x=*var, k=0, tamp=10;
     
     FILE* fichier = NULL;
     fichier = fopen("Interventions.txt", "w+");
     
     printf("\n\n");
     printf("Appuyez maintenant sur 'Entree' pour afficher les interventions.\n\n\n");
     getch();
     
     for(tamp=10; tamp>=0; tamp--)
         {
               for (z=0 ; z<=x ; z++)
               {
                   if (Prio[z]==tamp)
                      {
                           if (fichier != NULL)
                              {
                                   fprintf(fichier, "%d %d %s", Inter[z], Prio[z], Tech[z]);
                                   printf("Intervention %d (Priorite %d).\nIntervenant : %s", Inter[z], Prio[z], Tech[z]);
                                   printf("\n");
                              }
                      }
               }
         }
     fclose(fichier);          
     
     *i=z;
     *var=x;
     return ;  
}


Le problème est que pour remettre les donées dans mes tableaux, je compte le nombre de lignes pour faire une boucle "for". Hors lors d'un ajout le programme ne remet plus les données a la ligne a chaque ligne du tableau.
Ci dessous ma fonction qui me sert a lire et ré écrire mon fichier dans mes tableaux.

void lecture(int Inter[], int Prio[], int *i, int *var, char Tech[][20])
{
     int z=*i, x=*var, n=0, c;
     FILE* fichier = NULL;
     fichier = fopen("Interventions.txt", "r");
     if (fichier != NULL)
        {
            while ((c = fgetc(fichier)) != EOF)        //Comptage du nbr de lignes
                {
                     if (c == '\n')
                       {
                           n++;
                       }
                }
             x=n-1;
             fseek(fichier, 0, SEEK_SET);
             for(z=0; z<=x; z++)
                {
                     fscanf(fichier, "%d %d %s", &Inter[z], &Prio[z], &Tech[z]);
                     printf("Intervention %d (Priorite %d).\nIntervenant : %s\n\n", Inter[z], Prio[z], Tech[z]);
                }
        }
     fclose(fichier);    
     *i=z;
     *var=x;
     return ;   
}


Si quelqu'un pouvait m'expliquer d'où vient mon problème je lui en serais reconnaissant.
Merci d'avance.

Cordialement Pineau
A voir également:

2 réponses

mamiemando Messages postés 33459 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 8 janvier 2025 7 813
29 avril 2008 à 12:31
 fprintf(fichier, "%d %d %s", Inter[z], Prio[z], Tech[z]);

Ice n'est pas plutôt :
 fprintf(fichier, "%d %d %s\n", Inter[z], Prio[z], Tech[z]);

Bonne chance
0
Bonjour,

C'est bon je viens de comprendre mon probleme et de le résoudre.
En fait le soucis venait que lors de la saisie des chaines de caracteres, mon tableau skokait un \n a la fin de ma chaine.
Et lors de le remise en tableau dans le sens fichier =>tableau ce meme \n n'etait plus la d'ou la concaténation.

Mais j'ai viré le \n te ca va beaucoup mieux.

Merci beaucoup.
0
mamiemando Messages postés 33459 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 8 janvier 2025 7 813
29 avril 2008 à 20:13
Ok bonne continuation
0