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 :

Problème écriture dans un fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 4
    Par défaut Problème écriture dans un fichier
    Bonjour, j'ai un souci avec l'écriture dans un fichier de mes résultats.
    C'est un projet qui utilise la fonction tridag pour la résolution d'une matrice tridiagonal.
    Voici le code:

    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
    #include <stdio.h>
    #include <math.h>
    #include <stdlib.h>
    #include "tridag.h"
     
     
    main()
    {                                   
          double k,a,b,L,T0,Te,t,teta0;                 
          double A[100],B[100],C[100],D[100],u[100];     
          unsigned long N;
          int i,j;
          FILE *fp;                                                      
          fp=fopen("RESULTAT", "w");    
     
          printf("Entrez les valeurs de k,a,b,L,T0,Te et N\n");          
          scanf("%lf%lf%lf%lf%lf%lf%d",&k,&a,&b,&L,&T0,&Te,&N);
     
          t=(10*(2*a+2*b)*L*L)/(k*a*b);                            
          teta0=(T0-Te)/Te;
     
     
     
          for (i=1;i<N;i++){                                 
                    B[i]=2+(1./N)*(1./N)*t;
                            }
                              B[N]=1+(1./N)*(1./N)*t;   
     
     
          for (i=2;i<=N;i++){                                 
                    A[i]=-1;
                            }
          for (i=1;i<=(N-1);i++){                                 
                    C[i]=-1;
                            }
          D[1]=teta0;
          for (i=2;i<=N;i++){                                 
                    D[i]=0;
                            }
     
         tridag(A,B,C,D,u,N); 
     
     
         for (i=1;i<=N;i++){                                   
                            u[i]=Te*u[i]+Te;
                            //printf("T[%d]=%lf\n",i,u[i]);
                            fprintf(fp,"%d      %lf\n",i,u[i]);           
                                }
                            //getch();
                            fclose(fp);                                
              }
    Voici également la fonction tridag:

    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
    void tridag(double a[], double b[], double c[], double r[], double u[],
    	unsigned long n)
    {
    	unsigned long j;
    	double bet,*gam;
     
    	gam=(double*)malloc(n*sizeof(double));
    	if (b[1] == 0.0) printf("Error 1 in tridag");
    	u[1]=r[1]/(bet=b[1]);
    	for (j=2;j<=n;j++) {
    		gam[j]=c[j-1]/bet;
    		bet=b[j]-a[j]*gam[j];
    		if (bet == 0.0)	printf("Error 2 in tridag");
    		u[j]=(r[j]-a[j]*u[j-1])/bet;
    	}
    	for (j=(n-1);j>=1;j--)
    		u[j] -= gam[j+1]*u[j+1];
     
    }
    Pour les valeurs a entrer, dans l'ordre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    164
    4
    50
    40
    46
    20                
    50
    Je ne comprend pas, peut-ètre que j'utilise mal les fopen, fprintf...
    Enfin le fait est que l'affichage a l'écran s'effectue, j'ai les bons résultats, mais a l'écriture, la console s'arrète.
    Merci bcp d'avance.

    Pour info je tourne sous xp, j'utilise dev cpp, et c'est un projet de physique, je ne suis pas informatitien donc désolé d'avance si l'erreur est bête.

  2. #2
    Membre éclairé Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Par défaut
    Quelques remarques :

    Dans le main :
    - int main() et non pas main()
    - pas de test sur l'ouverture du fichier
    - scanf a éviter ----> préférer plutot fgets + la ou les fonctions de conversion qui vont bien
    - tu demandes a l'utilisateur de rentrer N, qui est la borne de tes boucles, si l'utilisateur rentre 101 par exemple, t'es fichu car tes tableaux sont déclarés comme ça : B[100] . . .

    Dans la fonciton :

    - pas de test sur malloc
    - pas besoin de caster le retour d'un malloc

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                            fprintf(fp,"%d      %f\n",i,u[i]);
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                            fprintf(fp,"%d      %g\n",i,u[i]);

  4. #4
    Futur Membre du Club
    Inscrit en
    Juin 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 4
    Par défaut re
    [-mod- Merci de relire les regles du forums. La langue d'expression est le français et non le borborygme. Merci de te relire et de te corriger]


    Tout d'abord merci pour ces premières réponces,
    J'ai éssayé de changer %lf en pourcent g ou f, mais ça n'as rien changer, la console plante toujours.
    Et pour ce que tu me suggère Gyzmo, comme par exemple fgets, je ne sais pas m'en servir.
    Apriori je pense que c'est à cause du sous programme que sa ne fonctionne pas, en effet si je place le fprintf avant la fonction tridag sa marche( pour écrire B[] par exemple), dès que je place sa après, rien, même un texte ne sera pa écrit.

  5. #5
    Membre éclairé Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Par défaut
    Pour fgets : http://man.developpez.com/man3/fgets.3.php
    Tu trouveras ton bonheur

  6. #6
    Futur Membre du Club
    Inscrit en
    Juin 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 4
    Par défaut
    C'est bon j'ai trouvé, c'est la mémoire alloué par le malloc qui n'était pas suffisante, et sans trop savoir pourquoi j'ai rajouté un facteur dix et ça a fontionner.
    Code:


    gam=(double*)malloc(n*sizeof(double)*10);

    Merci d'avoir cherché!
    ++

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

Discussions similaires

  1. Problème écriture dans un fichier txt
    Par reperret dans le forum VB.NET
    Réponses: 7
    Dernier message: 26/03/2013, 10h26
  2. problèmes écriture dans un fichier
    Par DJEcalcul dans le forum Fortran
    Réponses: 3
    Dernier message: 26/10/2009, 12h06
  3. Problème écriture dans un fichier temporaire
    Par scary dans le forum Entrée/Sortie
    Réponses: 12
    Dernier message: 02/07/2009, 02h05
  4. [PERL] Problème lecture/écriture dans un fichier
    Par LE NEINDRE dans le forum Langage
    Réponses: 4
    Dernier message: 17/08/2005, 13h15
  5. Problème d'écriture dans un fichier xml
    Par vanoou dans le forum C++Builder
    Réponses: 1
    Dernier message: 13/07/2005, 02h28

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