IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Modification dans des fichiers (fseek)


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 23
    Par défaut Modification dans des fichiers (fseek)
    Bonjour à tous,

    Je dois faire un exercice avec des structures et fichier. J'ai fais l'ajout, la recherche et l'affichage. Mais la modification je coince.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void Modif(struct Donnees *pNew,FILE*fp)
    {
        int nb;
        nb=Rech(pNew); // l'emplacement du nom recherché
        if(nb!=0)
            fp= fopen (chemin, "w+b"); //ouverture du fichier en écriture
        fseek(fp, nb*sizeof(pNew),SEEK_SET); 
        LireDonnee(pNew,fp); // Ajout des données de ma structure
        fclose(fp);
    }
    Mon programme si besoin 8.2.c

    Merci d'avance

    Kallidus

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Tu mélanges trop de tâches dans ton code: Tu devrais séparer la saisie des données sur l'entrée standard et l'écriture du fichier.
    De plus:
    • fflush(stdin) est une erreur. fflush() n'est défini que pour les flux sortants. Ce n'est pas comme ça qu'on nettoie le buffer clavier.
    • Pourquoi faire les saisies à coup de getchar() plutôt que fgets()?
    • Ne passe pas en paramètre de fonction des variables dont la valeur n'est pas utilisée par la fonction (ta fonction Modif() n'a pas besoin de fp en paramètre, mais en variable locale)
    • Tes boucles de saisie de chaîne et de retour si erreur, tu peux en faire une fonction: Passe-lui juste les messages d'erreur et la limite de taille en paramètres.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    J'ajoute que tu ne vérifies la valeur de retour d'aucun de tes appels système. Comment espères-tu de cette manière découvrir l'origine des erreurs à l'exécution ?

  4. #4
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 23
    Par défaut
    Merci de vos réponses @Médinoc et @Matt_Houston.

    Citation Envoyé par Médinoc Voir le message
    Tu mélanges trop de tâches dans ton code: Tu devrais séparer la saisie des données sur l'entrée standard et l'écriture du fichier.
    De plus:
    Tu dis que je dois faire une fonction de mon menu dans le main?

    Citation Envoyé par Médinoc Voir le message
    Pourquoi faire les saisies à coup de getchar() plutôt que fgets()?
    C'est le prof qui l'a demandé.

    Citation Envoyé par Médinoc Voir le message
    Ne passe pas en paramètre de fonction des variables dont la valeur n'est pas utilisée par la fonction (ta fonction Modif() n'a pas besoin de fp en paramètre, mais en variable locale)
    Tes boucles de saisie de chaîne et de retour si erreur, tu peux en faire une fonction: Passe-lui juste les messages d'erreur et la limite de taille en paramètres.
    Ok merci du conseil.

    Citation Envoyé par Matt_Houston Voir le message
    J'ajoute que tu ne vérifies la valeur de retour d'aucun de tes appels système. Comment espères-tu de cette manière découvrir l'origine des erreurs à l'exécution ?
    Vérifier la valeur de retour??

    Bien à vous

    Kallidus

  5. #5
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Citation Envoyé par Kallidus Voir le message
    Vérifier la valeur de retour??
    Okay...

    Les fonctions qui sollicitent des ressources du systèmes peuvent échouer : que se passera-t-il si tu tentes d'accéder à un fichier qui n'existe pas ? Afin de déterminer la manière dont a été effectuée l'opération demandée ou si une erreur s'est produite, ces fonctions disposent d'un mécanisme pour informer l'appelant du résultat. Le plus souvent ce mécanisme prend la forme d'un code transmis par la valeur de retour de la fonction. Je t'invite à consulter les pages de manuel des appels que tu utilises.

  6. #6
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 23
    Par défaut
    Bonjour,

    Sur le site, y aurait-il un tutoriel ou des explications sur les fichiers en C?

    Car là, je patauge.

    Kallidus

  7. #7
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 156
    Billets dans le blog
    151
    Par défaut
    Bien sûr, il y a des tutoriels, et la FAQ aussi.

    Et bien sûr, un tutoriel sur les fichiers
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. [Jena] Enregistrement des modifications dans un fichier OWL
    Par waima dans le forum Frameworks
    Réponses: 1
    Dernier message: 06/07/2010, 14h39
  2. Programme de remplacement de texte dans des fichiers
    Par Invité4 dans le forum Linux
    Réponses: 13
    Dernier message: 12/11/2006, 16h06
  3. [XP] recherche dans des fichiers d'extension jsp
    Par drinkmilk dans le forum Windows XP
    Réponses: 5
    Dernier message: 20/10/2005, 08h55
  4. Réponses: 9
    Dernier message: 25/09/2005, 16h33
  5. [Rech. Comp.] Lire et écrire dans des fichiers XML
    Par Rodrigue dans le forum C++Builder
    Réponses: 4
    Dernier message: 26/08/2005, 20h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo