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 :

probleme avec fopen()


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2019
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : amateur
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2019
    Messages : 12
    Par défaut probleme avec fopen()
    Bonjour, j'ai coder une fonction "fouvrir" qui prend en paramètre le nom du fichier à ouvrir, test si il est bien ouvert, si il l'est renvoie le pointeur vers le fichier en question et si il ne l'est pas arête le programme. J'ai codé cette fonction il y a 2 jours, je l'avais testé et elle marchait parfaitement bien, cependant maintenant la fonction fopen semble ne plus s’exécuter, le programme s’arrêtant brusquement. Si quelqu'un a une solution, merci de m'en faire part, elle m'empêche d'avancer.

    la fonction en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    FILE* fouvrir(char *name){
     
        FILE* fichier = fopen(name, "r+");
     
        if(fichier == NULL){
            printf("erreur lors de l'ouverture du fichier dictionnaire\n");
            exit(0);
        }
        return fichier;
    }

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    Il n'y a pas de problemes dans ce code.
    Même si name gagnerait à etre const.
    Pourquoi crois-tu que le programme s'arrête ici ? Qu'en penses un debugger ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre habitué
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2019
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : amateur
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2019
    Messages : 12
    Par défaut
    Le programme ne continue pas et il retourne l'erreur "-1073741819 (0xC0000005)" (je ne sait pas si ça importe mais je suis sur codeBlock).
    Je ne sait pas comment utiliser un debugger, cependant j'ai mit des printf() entre toutes les lignes et le seul qui s'exécutait était celui avant le fopen()

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    Pourrait-on avoir le programme complet (je suppose qu'il est plutôt simple) et l'erreur complète ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Membre habitué
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2019
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : amateur
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2019
    Messages : 12
    Par défaut
    Voici les bouts du programme qui posent probleme(le programme n'est pas du tout fini)

    main.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>
     
    #include "interaction.c"
    #include "gestionFichier.c"
     
    int main()
    {
        FILE *dico = NULL;
     
        char *mot;
        char lettre = 0;
        int coups = 10;
        int longueurMot = strlen(mot);
        int *isTrouve = setupTab(mot);//tableau sert a : si la lettre nest pas trouver 0, si elle lest isTrouve = la lettre en question
        int gagne = 0;
     
        dico = fouvrir("dico.txt");
        mot = choisirMot(dico, mot);
        fclose(dico);
        //le programme continue apres ca
    gestionFichier.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    #include "gestionFichier.h"
     
     
     
    FILE* fouvrir(const char *name){
     
        FILE* fichier = fopen(name, "r+");
     
        if(fichier == NULL){
            printf("erreur lors de l'ouverture du fichier dictionnaire\n");
            exit(0);
        }
        return fichier;
    }
     
    void enumMots(FILE *fichier){
        int nbrMots = 0;
        char mot[20];
     
        rewind(fichier);
        fscanf(fichier, "%d\n", &nbrMots);
        printf("\n\n");
     
        for(int i = 0; i < nbrMots; i++){
            fscanf(fichier, "%s", mot);
            printf("%s\n", mot);
     
        }
        printf("\nNombre de mots : %d\n\n", nbrMots);
     
    }
     
    char* choisirMot(FILE* fichier, char* mot)
    {
     
        int nbrMots = 0;
        char carActuel = 0;
        int i = 0;
     
        rewind(fichier);
        fscanf(fichier, "%d\n", &nbrMots);
     
        const int MAX = nbrMots - 1, MIN = 0;
     
        srand(time(NULL));
        int adresseMot = (rand() % (MAX - MIN + 1)) + MIN;
     
        while (i != adresseMot)
        {
            fscanf(fichier, "%c", &carActuel);
            if(carActuel == '\n')
                i++;
     
        }
     
        fscanf(fichier, "%s", mot);
        return mot;
        //printf("%d --->%s\n", adresseMot, mot);
     
     
    }
    gestionFichier.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #ifndef GESTIONFICHIER_H_INCLUDED
    #define GESTIONFICHIER_H_INCLUDED
     
    FILE* fouvrir(const char *name);
    void enumMots(FILE *fichier);
    char* choisirMot(FILE* fichier, char* mot);
     
    #endif // GESTIONFICHIER_H_INCLUDED

  6. #6
    Membre habitué
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2019
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : amateur
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2019
    Messages : 12
    Par défaut
    l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Process returned -1073741819 (0xC0000005)   execution time : 1.611 s

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par oildo Voir le message
    Voici les bouts du programme qui posent probleme(le programme n'est pas du tout fini)
    Chez-moi, ce programme compile et tourne sans souci. D'ailleurs ce n'est pas la fonction fouvrir() qui pose problème (même si elle ne casse pas 3 pattes à un canard)

    Citation Envoyé par oildo Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include "gestionFichier.h"
    FILE* fouvrir(const char *name){
     
        FILE* fichier = fopen(name, "r+");
     
        if(fichier == NULL){
            printf("erreur lors de l'ouverture du fichier dictionnaire\n");
            exit(0);
        }
        return fichier;
    }
    Bon, les défauts de cette fonction
    1. elle ouvre le fichier en "a+" => le fichier doit donc exister sinon fopen() renvoie NULL (mais bon, on va dire que c'est une volonté du cahier des charges...)
    2. elle ouvre le fichier en "a+" => cela veut dire qu'on veut le modifier. Mais le code ne modifie jamais le fichier... (mais bon, il n'est pas fini alors on va dire que...)
    3. si le fichier ne peut pas être ouvert elle quitte sauvagement le programme => on ne quitte jamais un programme depuis une sous fonction. Le programme commence au main() et se termine au main(). Si la fonction ne peut pas faire son travail et que c'est critique alors elle n'a que le droit de retourner une valeur spéciale à son appelant pour qu'il puisse décider (c'est d'ailleurs ce que fait fopen())


    Et la principale critique, c'est que cette fonction pourrait en fait s'écrire FILE* fouvrir(const char *name){ return fopen(name, "r+") } et donc n'a pas une plus-value vraiment exceptionnelle...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [OpenGL ES]Probleme avec fopen
    Par crischprolch dans le forum OpenGL
    Réponses: 6
    Dernier message: 09/04/2008, 14h10
  2. probleme avec fopen !
    Par arnaud036 dans le forum Débuter
    Réponses: 12
    Dernier message: 27/02/2008, 15h05
  3. Probleme avec fopen()
    Par Panaméen dans le forum Bibliothèque standard
    Réponses: 4
    Dernier message: 12/12/2007, 21h25
  4. Réponses: 2
    Dernier message: 25/10/2006, 12h34
  5. Probleme avec fopen sous linux
    Par rivieremathieu dans le forum C
    Réponses: 2
    Dernier message: 16/06/2006, 12h04

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