Créer et reluire un fichier

Fermé
mobo - 23 mars 2008 à 08:22
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 - 24 mars 2008 à 03:17
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.
A voir également:

1 réponse

cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
24 mars 2008 à 03:17
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