Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : fonction fread() [ Divers / Débutant(e) ] (cacoucatatonique)

jeudi 23 octobre 2008 à 10:02:45 | fonction fread()

cacoucatatonique

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:

#include <stdio.h>
#include <stdlib.h>

struct  repertoire
    {
        char nom[15] ;
        char prenom[15];
        int age;
        char tel[15];
    };      

struct repertoire page;

int main(int argc, char *argv[])
{
     void creation_fichier (void);
    void remplir_fichier (void);
    void lire_fichier (void);
    void recherche_nom (void);
    void modif_nom (void);
    int choix;            
   
    while(1)
    {
        printf ("Creation de fichier, taper 1\n");
        printf ("remplir le fichier, taper 2\n");
        printf ("Consulter de fichier, taper 3\n");
        printf ("Consultater par nom, taper 4\n");
        printf ("Modification du nom, taper 5\n");
        printf ("Pour quitter taper 6\n");
        scanf ("%d", &choix);
   
        switch(choix)
        {

            case 1 :    creation_fichier ();
                        break;
               
            case 2 :    remplir_fichier ();
                        break;
   
            case 3 :    lire_fichier ();
                        break;

            case 4 :    recherche_nom ();
                        break;
                   
            case 5 :    modif_nom ();
                        break;

            case 6 :    return 0;
        }   
    }
 
  system("PAUSE");   
  return 0;
}

     void creation_fichier (void)
     {
         FILE *mon_fichier;
         char annuaire[21];
       
         printf ("Entrer le nom du fichier à créer : ");
         scanf ("%s", annuaire);   
         printf("\n");

         mon_fichier = fopen (annuaire, "a");
   
         if (mon_fichier == NULL)
         {
            printf ("Erreur à l'ouverture du fichier\n\n");
            return;
         }
   
         fclose(mon_fichier);   
    }
   
   
    void remplir_fichier (void)
    {
         FILE *mon_fichier;
         char annuaire[21];
         char choix='Y';
       
         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);
                 
                   fwrite (&page, sizeof(struct repertoire), 1, mon_fichier);
   
                   printf ("Voulez vous continuer (Y/N) ?");
                   fflush(stdin);  
                   scanf("%c", &choix);
                   printf("\n");
             }

             fclose(mon_fichier);   
    }
   
   
    void lire_fichier (void)
    {

    char annuaire[21];
    char choix='Y';
       
    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


cacoucatatonique

jeudi 23 octobre 2008 à 10:56:32 | Re : fonction fread()

fregolo52

Membre Club
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.

jeudi 23 octobre 2008 à 11:16:37 | Re : fonction fread()

cacoucatatonique

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.

cacoucatatonique

jeudi 23 octobre 2008 à 11:27:09 | Re : fonction fread()

fregolo52

Membre Club
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.

jeudi 23 octobre 2008 à 12:29:46 | Re : fonction fread()

cacoucatatonique

bein a vrai dire je ne l'ai pas choisi le prof :p

bein je te remercie et je testerai ca ce soir et je te tien au courant

cacoucatatonique


jeudi 23 octobre 2008 à 14:04:42 | Re : fonction fread()

fregolo52

Membre Club
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.



jeudi 23 octobre 2008 à 14:36:03 | Re : fonction fread()

fregolo52

Membre Club
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

jeudi 23 octobre 2008 à 16:22:25 | Re : fonction fread()

cacoucatatonique

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

cacoucatatonique

jeudi 23 octobre 2008 à 16:41:32 | Re : fonction fread()

SAKingdom

Membre Club
Ça donne quoi ceci:

while (fread (&page, sizeof(struct repertoire), 1, mon_fichier) >= sizeof(struct repertoire))
{

...
}

C++ (@++)


jeudi 23 octobre 2008 à 20:45:26 | Re : fonction fread()

cacoucatatonique

pour sakingdom, je suis désolé mais je ne suis pas assez experimenté en C pour te repondre ( ca fais mois d'un mois que je programme en c).

pour fregolo52, du coup alors je fait koi?

parceque tu ma un pe perdu
en cas je vai faire des essai pour voire un pe se qu'il va en resortir.
bein en cas bonne soiré et merci pour tout


cacoucatatonique



1 2

Cette discussion est classé dans : fichier, page, printf, void, choix


Répondre à ce message

Sujets en rapport avec ce message

probleme avec la modification de fichier texte [ par marabou ] voila g un pb car g doi fer une gestion de bibliotheque et dc g arrive a entré ds livre a regarder ms stock ms g aimerai modifier le fichier texte cad Besoin d'aide pour ce programme [ par ibnoul ] Salut j'aimerai avoir de l'aide a propos de ce programme en c++ il me sigale des errreurs et je ne parvient pas a les corriger. On me demande creer un Fichier + caratère " [ par Joky ] Problème moi :pVoilà j'écris dans un fichierMais je veux écrire le caractère "Donc c'est logique que le compilateur le prenne mal quoi !Donc j'voulais surcharge delete [ par koala01 ] Salut, Je m'adresse à vous car je suis confronté à un problème qui me  fait perdre mon latin... Je souhaites créer un "gestionnaire de mémoire" dans l probleme (segmentation) d'execution d'un thread [ par krusty24 ] salut tout le monde j'ai besoin de votre aide pour m'aider a resoudre un petit probleme d'execution de mon programme en C-ANSI ce programme permet de enregistrement/connezction simple [ par stefbuet ] bonjour, comment peut t'on faire pour qu'il y est dans une premiere page 2 champs de texte de saisie, un pour le pseudo, et un pour un pass, et _n bou lecture fichier binaire [ par Mickylord ] Salut !Bon aujourd'hui j'ai un "problème", du moins je pense ...J'essaye tant bien que mal d'ouvrire un .wav en binaire.Le problème arrive lorsque j'e pendu en c [ par scons ] bon jour, voila j'ai un probleme avec un programme en Cil s'agit du jeu du pendu.tout me semble pourtant corect mais je pense que je dois a voir un pr intruction zappee ! [ par chris5874 ] Bonjour,j'ai commence un petit programme en C. Malheureusement etant debutant, j'ai du surement negliger un detail car une instruction qui est censee ecriture dans un fichier [ par felonyx6 ] Bonjourje m addresse avous car j ai un petit probleme et cela fait un moment que je suis dessus.Le probleme est le suivant: je dois faire un programme


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,468 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.