Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème d'ouverture de fichier

Je ne vois pas d'où vient le problème

Sujet résolu
    19 février 2006 à 10:47:33

    Bonjour à tous

    Je suis en train de bosser sur un programme de repertoire, mais j'ai quelques problèmes.
    Il me semble que mon code n'est pas mauvais, mais pourtant le programme en fonctionne pas :(
    A l'execution, il me pose la question "Quel est le nom du contact que vous voulez ajouter ?", puis, une fois le nom rentré, il me met "Erreur dans l'ouverture du fichier" et le programme s'arrête !
    Pourtant, le nom du contact a bien été enregistré dans 'contacts.rep' o_O

    Pourriez vous m'aider svp ?

    main.c
    /* Repertoire V 1.0
    Codé par NainTernaute */


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

    enum verification {
        OK, ERREUR
    } valide;

    struct Contact {
        char prenom;
        char adresse;
        char telephone;
        char sexe;
        char age;
        char autres_infos;
    } contact;

    int main(int argc, char *argv[])
    {
        char nom_contact[50];
        FILE *fichier_contacts = NULL;
        FILE *fichier = NULL;

        printf("Quel est le nom du contact que vous voulez ajouter ? ");
        fgets(nom_contact, 50, stdin);

        fichier_contacts = fopen("contacts.rep", "a+");
        valide = verif(fichier_contacts);

        if (valide == OK) {
            fprintf(fichier_contacts, nom_contact);
            fputc('\n', fichier_contacts);
            fclose(fichier_contacts);
        }

        else if (valide == ERREUR) {
            printf("Erreur dans l'ouverture du fichier \n");
            printf("Le programme va maintenant etre arrete. \n");
            goto FIN;
        }


        fichier = fopen(nom_contact, "w");

        valide = verif(fichier);

        if (valide == OK) {
            printf("Prenom : ");
            while (contact.prenom != '\n') {
                contact.prenom = getchar();
                fputc(contact.prenom, fichier);
            }

            fclose(fichier);
        }

        else if (valide == ERREUR) {
            printf("Erreur dans l'ouverture du fichier ! \n");
        }


      FIN:

        return 0;
    }


    verif.c
    #include <stdio.h>

    enum verification {
        OK, ERREUR
    } valide;

    int verif(FILE * fichier)
    {

        int valide;

        if (fichier != NULL) {
            valide = OK;
        }

        else if (fichier == NULL) {
            valide = ERREUR;
        }
        return valide;
    }


    verif.h
    #ifndef verif

    #define verif verif


    int verif (FILE *fichier);

    #endif
    • Partager sur Facebook
    • Partager sur Twitter
      19 février 2006 à 10:52:03

      Dans ta structure contact, tu essaie de stocker un prénom sur un caractère :)

      Il faut revoir cette structure pour commencer !
      • Partager sur Facebook
      • Partager sur Twitter
        19 février 2006 à 10:54:12

        Le fait de stocker un prénom sur un caractère est fait exprès : dans la suite du programme, tu peux voir comment je fais fonctionner : une petite boucle qui demande le caractère tant que celui-ci n'est pas '\n' et l'écrit directement dans le fichier du contact :)
        • Partager sur Facebook
        • Partager sur Twitter
          19 février 2006 à 11:00:01

          Effectivement, je cherche ailleurs ;)
          Trouvé ! :p
          Pour commencer, j'ai supprimer les enum ;) (Mais bon)
          Ensuite :
          fprintf(fichier, nom_contact);
          fprintf(fichier_contacts, nom_contact);

          Pour finir, il faut faire attention !
          Car tu nomme un fichier avec un nom contenant une retour à la ligne :(
          • Partager sur Facebook
          • Partager sur Twitter
            19 février 2006 à 11:17:46

            Citation : Natim

            Effectivement, je cherche ailleurs ;)
            Trouvé ! :p
            Pour commencer, j'ai supprimer les enum ;) (Mais bon)
            Ensuite :
            fprintf(fichier, nom_contact);
            fprintf(fichier_contacts, nom_contact);

            Pour finir, il faut faire attention !
            Car tu nomme un fichier avec un nom contenant une retour à la ligne :(



            Pour le fprintf j'avais déjà corrigé :D
            Un nom contenant un retour à la ligne ? o_O Le fgets ajoute un retour à la ligne automatiquement ? :\ ça vient peut-être de ça alors, mais je ne sais pas comment l'enlever sans faire un scanf tout pas beau ^^
            • Partager sur Facebook
            • Partager sur Twitter
              19 février 2006 à 11:27:01

              Non non je fais pas de C++ :D

              En fait ça venait du fait que le fgets rajoute un '\n' ;)
              Pour corriger, j'ai ajouté ça :

              taille = strlen(nom_contact);
              nom_contact[taille-1] = '\0';


              Merci Louisclem :D
              • Partager sur Facebook
              • Partager sur Twitter

              Problème d'ouverture de fichier

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown