[C] conversion type string -> double

lostprophet Messages postés 7 Statut Membre -  
reginfo@cubba.com Messages postés 2 Statut Membre -
Bonjour,

je suis en train de programmer en langage C une fonction qui permet de lir un fichier .txt dont les lignes ressemblent a ca

1 3.058664433E-019 1.294707223E-003 -7.475013088E-004
2 3.00 ... . . . . . . ..............................................................

donc j'arrive bien a recuperer le 1 dans un tableau, le 3.058664433E-019, etc... mais comme j'utilise la fonction scanf, il s'agit de chaines de caractere et je n' arrive pas a convertir le 3.058664433E-019 en double...

meme avec la fonction atoi ca ne fonctionne pas ...

quelqu'un a une idee ?
A voir également:

6 réponses

reginfo@cubba.com Messages postés 2 Statut Membre 1
 
salut a tous comment je peu savoir si en caractere est un entier ou pas?
1
cataclypse
 
Salut,

je pense que tu devrais aller revoir la documentation de scanf... Cette fonction ne renvoie pas que des chaines de caracteres.

par exemple:

int x;
scanf(" %d", &x);


permet de lire x sur l'entrée standard et de l'interpréter comme un entier.

Je te laisse retrouver comment on fait si x est un double ;-)
0
fadi
 
je pense que tu devrais aller revoir la documentation de scanf... Cette fonction ne renvoie pas que des chaines de caracteres.

par exemple:


int x;
scanf(" %d", &x);


permet de lire x sur l'entrée standard et de l'interpréter comme un entier.

Je te laisse retrouver comment on fait si x est un double ;-)
0
dubcek Messages postés 19023 Date d'inscription   Statut Contributeur Dernière intervention   5 640
 
ou voir sscanf
int sscanf(const char *str, const char *format, ...);
sscanf reads its input from the character string pointed to by str
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Char Snipeur Messages postés 10112 Statut Contributeur 1 299
 
double num2str(char *c)//capable de lire toute les valeurs !
       {
       int i=0,v=1,j=1;
       int signe=1;
       if (c[0]=='-') 
              {
              signe=-1;
              i++;
              }
       if ((47>=c[i])|(c[i]>=58)) return log(v-2);// cas de gourance ou le premier caractère n'est pas un chiffre
       double val=(c[i]-48);
       i++;
       while((47<c[i])&(c[i]<58)|c[i]=='.'|c[i]=='e')
           {
           if (c[i]=='e')
                      {
                      char *f=new char;
                      for (int j=0;j<6;j++)
                      f[j]=c[i+j+1];
                      return signe*val*pow(10,num2str(f));
                      }
           if ((c[i]!='.')&v)
              {
              val*=10;
              val+=(c[i]-48);
              i++;
              }
           else
            if (c[i]!='.')
               {
               val+=(c[i]-48)/pow(double(10),double(j));
               i++;
               j++;
               }
            else
               {i++;v=0;}
           }
       return signe*val;
       }
tu peux remplacer le 'e' par 'E' pour ton problème
0
MRextra Messages postés 154 Statut Membre 35
 
met le contenu du fichier dans une chaine de caracteres ensuite appel la fonction ATOD (from ASCII TO Double) cherche sur cette voie
0