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 :

pb avec mon feof


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut pb avec mon feof
    Bonjour, j'ai un petit souci avec mon feof (enfin, je pense que le pb vient de là).
    J'ai fait une fonction qui ouvre un fichier, qui lit certaines valeurs, qui calcule une autre valeur et qui écrit ce résultat dans un autre fichier.
    Donc à chaque ligne de mon fichier que je lis, correspond une valeur calculée qui doit donc être écrit dans un nouveau fichier.

    Mon idée : je parcours toutes les lignes, je calcule et je m'arrête à la dernière ligne.

    Mon pb : la valeur de la dernière ligne vaut 0

    Dans la fonction ci-dessous, name_file est un fichier a ne+2 colonnes
    1e colonne : le temps, dernière colonne : la température, les autres : les fractions masiques de chaque espèce

    voici ma fonction :

    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
    void CalculPression(char * name_file,char * name_file_out,Engine * e,Species ** TabSpecies,double m,double R,unsigned int ne)
    {
        /* cette routine calcule la pression (en Pa) du systeme a l'instant t.
           
           name_file est un fichier qui contient les sorties a chaque instant.
           Chaque ligne de name_file est constitue du temps t, des fractions
           massiques de chaque espece et de la temperature
     
           name_file_out est le fichier de sortie dans lequel sera ecrite la pression
     
           e contient les caracteristiques du moteur
     
           TabSpecies contient toutes les donnees de chaque espece
     
           m est la masse du melange en g
           R est la constante des gaz parfaits en erg/(mol K)
     
           ne est le nombres d'especes du systeme
         */
     
        /* ouverture du fichier d'ecriture de la pression */
        FILE * fileOutput = fopen(name_file_out, "w+");
     
        /* ouverture du fichier de sorties */
        FILE * file=fopen(name_file,"r");
        if (file==NULL)
        {
    	fprintf(stderr,"Error in file %s line %d in function %s : file %s wasn't found\nExit program\n",__FILE__,__LINE__,__FUNCTION__,name_file);
    	exit(1);
        }
     
        char line[550];
     
        while( (!feof(file)) & (fgets (line, sizeof line, file) != NULL) )
        {
     
    	char *p = strchr(line, '\n');
     
    	if(p==NULL)
    	{
    	    fprintf(stderr,"Error in file %s line %d in function %s : tabular line is too short. Increase size of tabular line.\nExit program\n",__FILE__,__LINE__,__FUNCTION__);
    	    exit(1);
    	}
     
    	if (p != NULL)
    	    *p = 0;
     
    	unsigned int i;
    	double volume,dvolume_dt,y,t,T;
    	fscanf(file,"%lf",&t); /* on recupere le temps */
    	V_Vp(t,e,&volume,&dvolume_dt);
     
    	/* calcul de la masse molaire du melange M en g/mol */
    	double M=0.0;
    	for(i=0;i<ne;++i)
    	{
    	    /* on recupere la fraction massique de l'espece */
    	    fscanf(file,"%lf",&y);
     
    	    M+=y/TabSpecies[i]->M;
    	}
     
    	M=1.0/M;
     
    	fscanf(file,"%lf",&T); /* on recupere la temperature */
     
    	/* calcul de la pression en Pa (d'ou le coefficient 0.1) */
    	const double pression=m/volume*R/M*T*0.1;
     
    	/* on ecrit dans le fichier name_file_out la pression */
    	fprintf(fileOutput,"%g\n",pression);
     
        } /* fin du while */
     
        if (ferror(file)) /* an error occurred */
    	fprintf(stderr,"Error in file %s line %d function %s : a misreading occurred\nExit program\n",__FILE__,__LINE__,__FUNCTION__);
     
        /* on ferme les fichiers */
        fclose(fileOutput);
        fclose(file);
     
        //free(line);
     
        return;
    }
    je pense que l'erreur doit provenir de la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    while( (!feof(file)) & (fgets (line, sizeof line, file) != NULL) )

    Merci beaucoup.

  2. #2
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Pourquoi faire un fgets si tu fais des fscanf plus tard dans ton while?

    En principe, fais ton fgets et après regarde la chaine ligne pour y récupérer les valeurs de la ligne courante... T'as sûrement voulu utiliser sscanf à la place...

    Teste aussi si fileOutput n'est pas null...

    Jc

  3. #3
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Salut
    L'utilisation habituelle du fgets est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while( fgets (line, sizeof line, file) != NULL)
    {
      /// traitement de la chaîne
    }
    C'est une fois que fgets est NULL que tu peux tester si tu en as envie le feof(file).
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

Discussions similaires

  1. envoyer un mail avec mon programme
    Par shrek dans le forum C++Builder
    Réponses: 8
    Dernier message: 06/12/2006, 12h27
  2. [Configuration] pb avec mon serveur sur intranet
    Par dehbi dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 9
    Dernier message: 30/07/2004, 16h39
  3. Réponses: 13
    Dernier message: 26/04/2004, 19h32
  4. Problème avec mon firewall ...
    Par Wis dans le forum Tomcat et TomEE
    Réponses: 15
    Dernier message: 06/04/2004, 08h46

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