cs_cacoucatatonique
Messages postés164Date d'inscriptionvendredi 25 février 2005StatutMembreDernière intervention 7 octobre 2009
-
23 oct. 2008 à 10:02
fregolo52
Messages postés1114Date d'inscriptionmercredi 15 juin 2011StatutMembreDernière intervention 6 mai 2021
-
24 oct. 2008 à 08:59
salut a tous, et oui c'est encore moi mais bon javoue que ca me donne du fil a retordre.
voila je suis en train de faire un programme qui doit ecrire dans un fichier puis il doit le lire et tous afficher.
j'ai deja un bout de programme qui fonctionne en moitier parcequ'il ne me lit pas tous ce que j'ai rentrer dans le fichier.
les information que je rentre sont des structure global et mon programme est comme ca:
printf ("Entrer le nom du fichier à saisir: ");
scanf ("%s", annuaire);
mon_fichier = fopen (annuaire, "a");
if (mon_fichier == NULL)
{
printf ("Erreur à l'ouverture du fichier\n\n");
return;
}
while (choix=='Y'||choix=='y')
{
printf ("Entrer les champs de votre fichier\n");
printf("Nom :\n");
scanf("%s",&page.nom);
printf("Prenom:\n");
scanf("%s",&page.prenom);
printf("Age :\n");
scanf("%d",&page.age);
printf("Num de tel :\n");
scanf("%s",&page.tel);
printf ("\n\nEntrer le nom du fichier à consulter :\n ");
scanf ("%s", annuaire);
FILE *mon_fichier;
mon_fichier = fopen (annuaire, "r");
if (mon_fichier == NULL)
{
printf ("Erreur à l'ouverture du fichier\n\n");
return;
}
while (choix=='y' || choix=='Y')
{
while ( fread (&page, sizeof(struct repertoire), 1, mon_fichier), !feof (mon_fichier))
{
printf("Nom : %s\n",page.nom);
printf("Prenom : %s\n",page.prenom);
printf("Age : %d\n",page.age);
printf("Num de Tel : %s\n",page.tel);
}
printf("voulez vous continuer (y/n?");
fflush(stdin);
scanf("%c",&choix);
printf("\n");
}
fclose(mon_fichier);
}
pour l'ecriture de mon fichier il ny a pas de probleme parceque quand j'ouvre le fichier en question il y a toutes mes information de memorisé, parcontre quand je veux relire mon fichier il ne me recupere seulement que le premier bloc d'information et il laisse tomber le reste.
est ce que quelqu'un aurai une petite idée sur la direction que je doi prendre pour trouver la solution.
merci d'avance
fregolo52
Messages postés1114Date d'inscriptionmercredi 15 juin 2011StatutMembreDernière intervention 6 mai 20214 23 oct. 2008 à 10:56
salut,
vu que ton test ne te retourne pas ce que tu espères, je serais toi, je commencerais par les virer du while et de stocker les valeurs de retour de chaque fonction pour savoir laquelle te retourne une erreur.
Perso, je n'utilise jamais les virgules, quelle est sa signification entre tes 2 tests dans le while.
cs_cacoucatatonique
Messages postés164Date d'inscriptionvendredi 25 février 2005StatutMembreDernière intervention 7 octobre 2009 23 oct. 2008 à 11:16
si tu parle de ca:
while ( fread (&page, sizeof(struct repertoire), 1, mon_fichier), !feof (mon_fichier))
c pour lui dire qu'il me récupere les info jusqu'a la fin du fichier, et pour t'être sincère c'est l'exemple que le prof nous a donner en cours avec une adaptation pour lire des structures.
en faite l'exemple que l'on a eu etai le suivant:
while ( fread (&n, sizeof(int n), 1, mon_fichier), !feof (mon_fichier))
et pour ce que l'on doi faire il nous faut utiliser des structure.
ensuite de ce que l'on nous a expliquer si on ne met pas le "!feof (mon_fichier)" le pogramme saretera a la premiere valeur c pour ca qu'il y ai.
aprés perso ca fait que 3 semaine que je fait du C et je tavou que je rame enormement vue que je ne manipule pas souvent.
fregolo52
Messages postés1114Date d'inscriptionmercredi 15 juin 2011StatutMembreDernière intervention 6 mai 20214 23 oct. 2008 à 11:27
tu as un drole de prof, d'entrée de jeu il vous fait faire des tests comme ça !!!!
Essaie ça, juste pour faire des tests, après tu referas avec la méthode du prof :
int nbRead;
int isEnd;
nbRead = fread (&page, sizeof(struct repertoire), 1, mon_fichier);
isEnd = feof (mon_fichier);
while ( nbRead && !isEnd)
....
Et regarde les valeur nbRead et isEnd, ca va t'aider à savoir quelle fonction te retourne une erreur.
fregolo52
Messages postés1114Date d'inscriptionmercredi 15 juin 2011StatutMembreDernière intervention 6 mai 20214 23 oct. 2008 à 14:04
En effet, on choisit pas ses profs.
J'en ai discuté autour de moi, et on en a conclu :
- le ", !feof(..)", est inutile. La virgule indique que le résultat ne sera pas pris en compte
donc ce qui te fera sortir du while c'est le code de retour du fread, uniquement.
fregolo52
Messages postés1114Date d'inscriptionmercredi 15 juin 2011StatutMembreDernière intervention 6 mai 20214 23 oct. 2008 à 14:36
après avoir fait un petit test, je remarque que je t'ai dit une connerie.
Il semblerait que ce soit l'inverse.
Dans le while, la fonction fread est exécutée, mais le code de retour n'est pas pris en compte dans la condition de sortie du while. Seul le code de retour de feof est pris en compte.
donc c'est équivalent à faire :
while ( !feof (mon_fichier))
{
fread (&page, sizeof(struct repertoire), 1, mon_fichier);
...
}
Oublie mon 2e réponse, j'ai remarqué que mon code est faux
cs_cacoucatatonique
Messages postés164Date d'inscriptionvendredi 25 février 2005StatutMembreDernière intervention 7 octobre 2009 23 oct. 2008 à 16:22
bein tu dira merci de ma part autour de toi, et c'est genial de savoir que le prof n'est si bon que ca snif.
bein je test ca mais vue ta reponse ca doit fonctionner donc bein je te tien au courant .
merci encore
fregolo52
Messages postés1114Date d'inscriptionmercredi 15 juin 2011StatutMembreDernière intervention 6 mai 20214 24 oct. 2008 à 08:59
Essaie :
while ( !feof (mon_fichier))
{
int nbRead = fread (&page, sizeof(struct repertoire), 1, mon_fichier);
printf("Jai lu : %d structure\n",nbRead );
printf("Nom : %s\n",page.nom);
printf("Prenom : %s\n",page.prenom);
printf("Age : %d\n",page.age);
printf("Num de Tel : %s\n",page.tel);
}
printf("Je suis sorti de ma boucle\n" );