Lire des doubles à partir d'un fichier

Fermé
poitou86 - 29 mai 2008 à 14:04
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 - 31 mai 2008 à 00:23
Bonjour,

J'essaye de lire des valeurs de type double à partir d'un fichier mais sans succès.

Voilà un extrait du code :

FILE *pFile = fopen("data.txt", "r");
for(i=0; i<N; i++)
{
for(j=0; j<M; j++)
{
fscanf(pFile, "%s", tmp);
double x = atof(tmp);
Tab[i][j] = x;
}
}
fclose(pFile);

Si vous me corrigez le problème...et comment je peux écrire des entiers dans un fichier ????
MERCI.
A voir également:

1 réponse

Sri Lumpa Messages postés 177 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 1 juin 2010 69
30 mai 2008 à 23:49
Corrige moi si je me trompe mais je crois que pour le fscanf tu dois lui transmettre le pointeur sur ta variable tmp :
...
    fscanf(file, "%s", &tmp);
    Tab[i][j] = (double)atof(tmp);
...

Je pense que ça devrait mieux fonctionner comme ça.

Au cas où ce n'est pas le cas, peux-tu indiquer ce que ton programme ressort à cet endroit (genre le message d'erreur ou un comportement inattendu) ?

Ensuite pour écrire des entiers dans un fichiers tu as tout bêtement la fonction "fprintf"
FILE * file = fopen("ton_fichier", "w");
fprintf(file, "%d", ton_int);
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328
31 mai 2008 à 00:23
Bonsoir,
Le cast n'est pas nécessaire : tu peux utiliser %lf pour lire les doubles. Comme le Sri Lumpa, il faut pointer sur l'adresse de ta variable (mais je crois qu'avec des char* ça fonctionne quand même).
#include <stdlib.h>
#include <stdio.h>
#define N 3
#define M 3

int main(int argc, char *argv[])
{
    double tab[N][M];
    double tmp;
    FILE *pFile = fopen("data.txt", "r");
    for(int i=0; i<N; i++) {
             for(int j=0; j<M; j++) {
                      fscanf(pFile, "%lf", &tmp);
                      tab[i][j] = tmp;
                      printf("%lf\n", tab[i][j]);
             }
    }
    fclose(pFile); 
    system("PAUSE");
    return EXIT_SUCCESS;
}


Avec la matrice suivante :
1.01 2.22 3.1
4.59 5 6.85
7.74 8.56988745652 9.0000001
0