Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1661 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C] utiliser un nombre stocké dans un fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] utiliser un nombre stocké dans un fichier

n°1546596
cyber81
Posté le 22-04-2007 à 16:00:14  profilanswer
 

Salut tout le monde,
 
Dans un fichier j'ai memorisé une liste de "nb_valeurs" nombre du style :
0.1234
0.5687
0.3214
0.0256

 
Je voudrais les réutiliser et en calculer la moyenne. J'ai donc fait :
 

Code :
  1. float calcul_moyenne (int nb_valeurs)
  2.     {
  3.         FILE* monfichier;
  4.         monfichier= fopen ("poisson.doc","r" );
  5.         int i;
  6.         int nombre[5];
  7.         float somme=0;
  8.         for (i=0;i<nb_valeurs; i++)
  9.             {
  10.                 somme= somme + fscanf(monfichier, "%.4f",&nombre);   // jpense que je peux pas vraiment  
  11.                                                                   // ecrire ca comme ca, si ?
  12.             }
  13.         return (somme/(nb_valeurs));
  14.     fclose(monfichier);
  15.     }


 
J'ai lu aussi que je pouvais utiliser quelque chose comme fgets mais ici j'ai des nombres et pas une chaine de caracteres...  
 
Des suggestions ?

Message cité 1 fois
Message édité par cyber81 le 22-04-2007 à 16:03:20
mood
Publicité
Posté le 22-04-2007 à 16:00:14  profilanswer
 

n°1546598
zecrazytux
Posté le 22-04-2007 à 16:07:42  profilanswer
 

y a des focntions de conversion de chaine a d'autres type, comme atoi() qui transforme en integer


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
n°1546599
-Opera-
mago spé électricité
Posté le 22-04-2007 à 16:10:56  profilanswer
 

zecrazytux a écrit :

y a des focntions de conversion de chaine a d'autres type, comme atoi() qui transforme en integer


 
strtod()


---------------
You get so used to things the way they are. And I've always been alone. I guess that makes me lonely.
n°1546601
zecrazytux
Posté le 22-04-2007 à 16:14:09  profilanswer
 


qui transforme en double :)
 
voilà de quoi avancer :)


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
n°1546607
Darko_
Posté le 22-04-2007 à 16:27:47  profilanswer
 


Code :
  1. float calcul_moyenne (int nb_valeurs)
  2.     {
  3.         FILE* monfichier;
  4.         monfichier= fopen ("poisson.doc","r" );
  5.         int i;
  6.         float nombre;
  7.         float somme=0;
  8.         for (i=0;i<nb_valeurs; i++)
  9.             {
  10.                 fscanf(monfichier, "%.4f",&nombre);
  11.                 somme= somme + nombre;
  12.             }
  13.         return (somme/(nb_valeurs));
  14.     fclose(monfichier);
  15.     }


n°1546617
Taz
bisounours-codeur
Posté le 22-04-2007 à 16:58:54  profilanswer
 

contrôle la valeur retournée par fscanf

n°1546631
cyber81
Posté le 22-04-2007 à 17:45:01  profilanswer
 

j'ai controlé l'evolution de la somme et de la valeur de fscanf mais ca reste bloqué a 0, ou ca met n'importe quoi...  
 
Si j'ai bien compris strtod () transforme un nombre en chaine de caracteres? Le pb c'est qu'apres je vais devoir l'utiliser comme nombre...
 
merci pour toute vos reponses entouKa :) , ca m'eclaire un peu plus.

n°1546636
-Opera-
mago spé électricité
Posté le 22-04-2007 à 18:01:04  profilanswer
 

cyber81 a écrit :


Si j'ai bien compris strtod () transforme un nombre en chaine de caracteres?


Non c'est le contraire. Si tu tiens vraiment à travailler avec des float et non des double (ou que t'as pas le choix), c'est strtof().


---------------
You get so used to things the way they are. And I've always been alone. I guess that makes me lonely.
n°1546764
Sve@r
Posté le 22-04-2007 à 21:47:27  profilanswer
 

cyber81 a écrit :

j'ai controlé l'evolution de la somme et de la valeur de fscanf mais ca reste bloqué a 0, ou ca met n'importe quoi...

 
fscanf te renvoie le nombre de valeurs qu'il a stockées. Si ça te donne "0" alors que manifestement tu veux stocker une valeur, il y a un problème...
 

cyber81 a écrit :

Si j'ai bien compris strtod () transforme un nombre en chaine de caracteres?


Ben non. "strtod" se lit "str(ing) to d(ouble)" donc chaîne vers nombre donc ça transforme une chaîne en nombre !!!
 

cyber81 a écrit :

Dans un fichier j'ai memorisé une liste de "nb_valeurs" nombre du style :
0.1234
0.5687
0.3214
0.0256

 
Je voudrais les réutiliser et en calculer la moyenne. J'ai donc fait :
 

Code :
  1. float calcul_moyenne (int nb_valeurs)
  2.     {
  3.         FILE* monfichier;
  4.         monfichier= fopen ("poisson.doc","r" );
  5.         int i;
  6.         int nombre[5];
  7.         float somme=0;
  8.         for (i=0;i<nb_valeurs; i++)
  9.             {
  10.                 somme= somme + fscanf(monfichier, "%.4f",&nombre);   // jpense que je peux pas vraiment  
  11.                                                                   // ecrire ca comme ca, si ?
  12.             }
  13.         return (somme/(nb_valeurs));
  14.     fclose(monfichier);
  15.     }



Il n'y a aucune cohérence dans ce que t'écris
1) pourquoi tu prépares un tableau de 5 nombres alors que, manifestement, tu n'en utilises qu'un seul dans ta boucle ???
2) un tableau de 5 "int" pour stocker des nombres à virgule flottante  ??? :sarcastic:  
3) "&nombre" dans ton fscanf montre que vraiment tu ne sais pas que "nombre" est un tableau. C'est pourtant écrit 3 lignes au dessus !!!
4) somme=somme+fscanf(...) => finallement, on se demande de plus en plus à quoi sert la variable (ou le tableau) "nombre" que tu n'utilises en fait jamais
 

cyber81 a écrit :

J'ai lu aussi que je pouvais utiliser quelque chose comme fgets mais ici j'ai des nombres et pas une chaine de caracteres...


Ton fichier contient les éléments suivants
'0' '.' '1' '2' '3' '4' '\n' '0' '.' '5' '6' '8' '7' '\n' '0' '.' '3' '2' '1' '4' '\n' '0' '.' '0' '2' '5' '6' '\n'
 
Tels que je te les affiche, c'est bien une suite de caractères non ??? Que la commande "cat" (Unix/Linux) ou "type" (Windows) te les affiche bien proprement ligne par ligne (chaque ligne calée sur le '\n') n'est qu'un effet d'affichage. Et que ces suites de caractères représentent des nombres dans ta tête n'est qu'une adaptation que fait ton cerveau de ce qu'il voit => Pour l'ordinateur, ce ne sont que des caractères !!!
 

cyber81 a écrit :

Des suggestions ?


Oui. Commence par bien comprendre ce que contient ton fichier... et comment fonctionnent les fonctions que t'invoques (le C n'est pas de la sorcellerie). Un petit peu de jugeotte algorithmique par dessus (inutile de déclarer un tableau si on n'utilise qu'un nombre à la fois) et tout ira beaucoup mieux...


Message édité par Sve@r le 28-04-2007 à 19:26:09

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C] utiliser un nombre stocké dans un fichier

 

Sujets relatifs
[PHP][resolu] Comment appeler une fonction située....Lire un fichier a l'envers
Ecriture dans un fichier Exceltraitement dans un fichier texte
Accès fichier sur serveur distant[VBA] Ouverture fichier avec boite dialogue
Ouverture de fichier avec macros, sans confirmation (par certificat ?)[Bash] choisir une ligne d'un fichier avec une boucle select
[débutant] retrouver la ligne courante du fichier[c] Récupération de fichier partagé sur un réseau
Plus de sujets relatifs à : [C] utiliser un nombre stocké dans un fichier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR