[C] conversion type string -> double

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 ?

6 réponses

  • Votes
  • Date
  • Date décroissante
  1. salut a tous comment je peu savoir si en caractere est un entier ou pas?
    1. 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 ;-)
      1. 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 ;-)
        1. Contributeur
          ou voir sscanf
          int sscanf(const char *str, const char *format, ...);
          sscanf reads its input from the character string pointed to by str
          1. Contributeur
            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
            1. met le contenu du fichier dans une chaine de caracteres ensuite appel la fonction ATOD (from ASCII TO Double) cherche sur cette voie