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 pendant l'écriture du fichier


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    juillet 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : juillet 2021
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Probleme pendant l'écriture du fichier
    Bonjour Madame, Monsieur,

    Pour un projet je dois créer un système de management de banque. Pour cela je veux créer un fichier où on peut enregistrer les noms. Mon programmation reste très basique. Dès que j'essaie d'enregistrer sur le fichier cela pose problème.Pouvez vous corriger le problème? Merci
    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
     # include <stdlib.h>
    # include <stdio.h>
    # include <tgmath.h>
    # define  NB_ELEM
     
     
    void affichage(int n , float x[n]){  // initialisation de tableau 
      int i;
        for(i = 0;i<n; i++){
        x[i]=0;
        printf(" la valeurs de x[%d] = %f\n",i,x[i]);
        };
        return;
    };
     
     
    void changer_fichier(int N2, float x1[NB_ELEM]){  // création de fichier 
      FILE *fp;
      int i = 0;
     
      fp = fopen("/media/Tonny/TOSHIBA EXT/programmation_c/exercice1/test1.txt","w");
      if (fp = NULL){
        printf("le fichier n'existe pas ");
      };
     
      for(i = 0; i<N2; i++){
      fprintf(fp,"%f", x1[i]);
      };
      return;
    };
     
     
     
    int main (void){
      int n,i;
      n  = 0;
      i = 0;
      printf ("saisir une valeur");
      scanf("%d",&n);
      printf("valeur saisi est égale : %d", n);
      float x1[n];
      float x2[n];
     
     
      for(i = 0; i<n;i++){
        x2[i]=0;
      };
     
      printf("%f",x2[n]);
      affichage(n,x1);  
      changer_fichier(n,x2); // enregistrer dans le fichier 
     
     
     
      exit(EXIT_SUCCESS);
     
    };
    erreur :
    valeur saisi est égale : 10 la valeurs de x[0] = 0.000000
    la valeurs de x[1] = 0.000000
    la valeurs de x[2] = 0.000000
    la valeurs de x[3] = 0.000000
    la valeurs de x[4] = 0.000000
    la valeurs de x[5] = 0.000000
    la valeurs de x[6] = 0.000000
    la valeurs de x[7] = 0.000000
    la valeurs de x[8] = 0.000000
    la valeurs de x[9] = 0.000000

    Erreur de segmentation (core dumped)

  2. #2
    Membre éclairé
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    septembre 2015
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : septembre 2015
    Messages : 167
    Points : 714
    Points
    714
    Par défaut
    bonjour


    => tu ne définies pas la valeur
    alors quand il arrive à


    les "return" dans les void ne sont pas nécessaires


    je n'ai pas regardé plus loin s'il y avait d'autres erreurs

  3. #3
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    décembre 2015
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : décembre 2015
    Messages : 1 294
    Points : 6 314
    Points
    6 314
    Par défaut
    Bonjour,

    ligne 49, tu écris printf("%f",x2[n]);. A cet instant combien vaut n selon toi? Le programme pourtant ne plante pas ici.
    mais le problème est ligne 22. Le compilateur as-tu d'avertir. Tu écris if (fp = NULL), c'est un test il faut mettre un double égal ==.

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    9 162
    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 : 9 162
    Points : 25 176
    Points
    25 176
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par tuba uba Voir le message
    Pouvez vous corriger le problème? Merci
    On peut te dire où sont les problèmes, à toi de les corriger.
    Donc float x[n] dans les paramètres des fonctions (valeur de n ???). Ecrire x[i]=0 juste avant de l'afficher... Ta fonction "affichage" a pour commentaire "initialisation" ??? Et tu testes si fp vaut NULL (en fait c'est pas un test comme le dit dalfab mais une affectaion) mais s'il vaut NULL tu continues quand-même à remplir un fichier qui n'a pas été ouvert.
    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

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    juillet 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : juillet 2021
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci pour aide rapide. Vous avez raison c'est affectation qui était responsable du message erreur. Même si je n'arrive pas remplir comme je le souhaite le fichier texte. Au moins les erreurs ont été corrigé. Je vais continuer à améliorer mon programme. Pour ce qu'est la valeur de n, j'ai toujours pris n=10. Ce qui m'a dérouter un peu c'est quand je compilait,il n'y avait pas erreur. C'est au moment exécution j'ai eu cette erreur.

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    9 162
    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 : 9 162
    Points : 25 176
    Points
    25 176
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tuba uba Voir le message
    Pour ce qu'est la valeur de n, j'ai toujours pris n=10.
    Il te faut revoir les notions de visibilité des variables. Une variable n située dans un bloc A ne sera pas la même chose qu'une variable n située dans un bloc B. De plus un tableau float x[n] en tant que paramètre (alors que n n'existe pas) je n'arrive même pas à comprendre comment ça compile et ce que le compilateur peut y comprendre (peut-être y voit-il un VLA?). Idem pour le #define NB_ELEM sans valeur (ceci dit essayer d'afficher ensuite NB_ELEM d'une quelconque façon entraine une erreur de compilation).

    Citation Envoyé par tuba uba Voir le message
    Ce qui m'a dérouté un peu c'est quand je compilait,il n'y avait pas erreur. C'est au moment exécution j'ai eu cette erreur.
    La compilation c'est juste une traduction de syntaxe. Elle ne remplacera pas la réflexion. Si tu écris dans une syntaxe correcte un algo incorrect, ça compilera. Et en plus le compilateur ne te préviendra même pas si tu dépasses les limites (exemple si tu tapes dans l'indice 15 d'un tableau de 10 éléments) car la philisophie du C c'est "pour aller le plus vite possible je ne vérifie rien, c'est au programmeur de vérifier ce qu'il fait" (enfin les compilos modernes avec les options adéquates peuvent détecter certaines incohérences mais quoi qu'il arrive ils ne sont pas là pour remplacer ton cerveau)
    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

  7. #7
    Membre confirmé
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    juillet 2020
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : juillet 2020
    Messages : 153
    Points : 591
    Points
    591
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Il te faut revoir les notions de visibilité des variables. Une variable n située dans un bloc A ne sera pas la même chose qu'une variable n située dans un bloc B. De plus un tableau float x[n] en tant que paramètre (alors que n n'existe pas) je n'arrive même pas à comprendre comment ça compile et ce que le compilateur peut y comprendre (peut-être y voit-il un VLA?). Idem pour le #define NB_ELEM sans valeur (ceci dit essayer d'afficher ensuite NB_ELEM d'une quelconque façon entraine une erreur de compilation).
    [...]
    Dans le cas de void changer_fichier(int N2, float x1[NB_ELEM]) on obtient le prototype void changer_fichier(int N2, float x1[]) qui est tout à fait valide et équivalent à void changer_fichier(int N2, float *x1).

    Dans le cas void affichage(int n , float x[n]) c'est la notation VLA et non un VLA qui est utilisé. n est bien défini auparavant en tant qu'int, il n'y a donc pas de soucis. Cette utilisation de la notation VLA sera d'ailleurs recommandée dans la prochaine norme C23 afin d'améliorer entre autre la lisibilité.
    En l'état void affichage(int n , float x[n]) est strictement équivalent à void affichage(int n , float x[]).

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    9 162
    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 : 9 162
    Points : 25 176
    Points
    25 176
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par WhiteCrow Voir le message
    En l'état void affichage(int n , float x[n]) est strictement équivalent à void affichage(int n , float x[]).
    Joli
    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

Discussions similaires

  1. Probleme mémoire: écriture gros fichier
    Par rnn430 dans le forum Débuter
    Réponses: 5
    Dernier message: 17/11/2009, 10h01
  2. Empêcher la lecture d'un fichier pendant son écriture
    Par FredericB dans le forum C++Builder
    Réponses: 1
    Dernier message: 25/07/2007, 18h30
  3. probleme d'ecriture dans un fichier texte
    Par azrael88370 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 24/01/2005, 17h33
  4. Probleme d'ecriture dans un fichier en mode Text
    Par bbozet dans le forum C++Builder
    Réponses: 3
    Dernier message: 14/01/2004, 13h46
  5. Probleme sur le Fields des fichiers Xmlgram
    Par Sandrine75 dans le forum XMLRAD
    Réponses: 4
    Dernier message: 20/03/2003, 17h09

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