Créer et reluire un fichier
mobo
-
cchristian Messages postés 928 Statut Membre -
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.
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
-
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,