Créer et reluire un fichier

mobo -  
cchristian Messages postés 928 Statut Membre -
Bonjour,
j'ai un probleme avec l'exercice suivant:

Enoncé:
créer et relire un fichier texte de 5 chaines de 3 caracteres, ajouter une chaine de 3 caracteres et relire à nouveau.

voici ma solution (à corrigée)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main()
{int i;
char nomfi[20];
char nomcar[4];
FILE*fiche;
printf("entrez nom fichier:\n");
scanf("%20s", nomfi);
fiche=fopen(nomfi, "w");

for(i=0; i<5; i++)
{
printf("saisir la chaine numero %d:\n", i+1);
scanf("%3s", nomcar);
fwrite(nomcar, sizeof(int), 5, fiche);
}
fclose(fiche);

fiche=fopen(nomfi, "r");
for(i=0; i<5; i++)
{
fread(nomcar, sizeof(int), 5, fiche);
printf("\n%3s\n",nomcar);
}
fclose(fiche);
system("PAUSE");
return 0;
}

le probleme que j'ai est que:
1- je ne suis même pas sur si je suis dans l'idée de l'exercice
2- je n'arrive pas à relir la chaine de 3 caracteres.
Configuration: Windows XP
Internet Explorer 6.0

1 réponse

  1. cchristian Messages postés 928 Statut Membre 131
     
    Bonsoir,

    J'ai fait une petite correction de ton code, par contre je ne sais absolument pas comment faire reluire un fichier.

    //Oubli de int devant main (erreur à la compilation)
    int main() 
    {
        //Initialise les variables.
    	int i = 0; 
        //Initialise les tableaux et prévois les plus grand. (au-delà ça plante !)
        char nomfi  [64] = ""; 
        char nomcar [16] = ""; 
        FILE*fiche; 
    
        //Précise davantage le sens des libellés des messages. 
    
        while  ( strlen (nomfi) < 5 || strlen (nomfi) > 20 )             
           {
            printf ("\n\n Entrez un nom fichier et son extension"
                     " (minimum 5 c. - maximum 20 c.) : \n"); 
            scanf ("%64s", nomfi);
            if (strlen (nomfi) < 5 || strlen (nomfi) > 20 )
             {
               printf ("\n nom de fichier incohérent \n");
             };
       //Ici on pourrait pousser davantage les tests de cohérence ....
           }
    
        fiche = fopen (nomfi, "w"); 
    
        for (i = 0; i < 5; i++) 
           { 
            printf ( "\n\n Saisir la chaine numero %d constitu\202e de "
    	  "3 c. au maximum : \n", i+1); 
            while  ( strlen (nomcar) != 3 )             
              {
                scanf  ( "%16s", nomcar ); 
                if ( strlen (nomcar) != 3 )
                 {
    	printf ("\n Longueur de la chaine de caractères"
    	          " différente de 3 \n");
                 }
             //Ici on pourrait pousser davantage les tests de cohérence ....
              }
             // Pourquoi  sizeof (int) ? tu fais : scanf  ( "%3s", nomcar ); 
    //         fwrite ( nomcar, sizeof (int), 5, fiche ); 
             fwrite ( nomcar, sizeof (char), 3, fiche ); 
    		 nomcar [0] = '\0';
           } 
    
    //Tu avais oublié cette séquence (ajout de 3 caractères)
    //-----------------------
       fclose ( fiche );
       fiche = fopen (nomfi, "a+"); 
       fwrite ( "***", sizeof (char), 3, fiche ); 
       fclose ( fiche );
    // -----------------------
    	
        fiche = fopen ( nomfi, "r" ); 
        for ( i = 0; i < 6; i++ ) 
           { 
            fread  (nomcar, sizeof(char), 3, fiche); 
            printf ( "\n%3s\n", nomcar ); 
           } 
        fclose ( fiche ); 
        system ( "PAUSE" ); 
        return ( 0 ); 
    } 


    Sinon c'était pas mal du tout,
    0