[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 ?

6 réponses

  1. 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
  2. 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
  3. 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
  4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    ou voir sscanf
    int sscanf(const char *str, const char *format, ...);
    sscanf reads its input from the character string pointed to by str
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    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
  7. 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