separierten string umwandeln nach double:



  • Hallo zusammen:

    ich glaube so langsam daß mich ein Pferd tritt!
    Bei mir liest das Programm in der
    1. Zeile den richtigen Wert: 21.510
    aus und in der
    2. Zeile einen verkehrten:21.496 !!!!!

    WARUM?
    habt ihr eine Ahnung, was ich hier verkehrt gemacht habe?

    #include <stdio.h>
    #include <string.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <ctype.h>
    
     #include "string_to_double.c"
    
    int main (void)
    {
    printf("dX_Start=%.3f\n",string_to_double("N331G3X21.51Y4.I-2.49J0.", "X"));
    printf("dX_Start=%.3f\n",string_to_double("N332G1X21.49", "X"));
    system("Pause"); 
    }
    

    hier der Rest:

    #include <stdio.h> 
    #include <ctype.h>
    
    #include "header.h"
    //double string_to_double(char *in, char *suchstring);  
    
    double string_to_double(char *in, char *suchstring) 
    {
     char *ptr_quelle;
     int pos=0 , i=0;
    
     char string[32]; //es kann eine Zahl mit 32 stellen ausgelesen werden  
     char *p = string;
    
     double value; 
    
     ptr_quelle=strstr(in, suchstring);
     if(ptr_quelle!=0)
     {//habe string gefunden :-)
    
      //pos hinter gefundenem String
      ptr_quelle=ptr_quelle+strlen(suchstring);
    
      //blende Leerzeichen aus
      while (*ptr_quelle == ' ') *ptr_quelle++;           
    
      // Extrahiere die zahl nach dem suchstring 
      // bis keine Ziffer mehr kommt 
      while (isdigit (*ptr_quelle) || *ptr_quelle == '.'\
           || *ptr_quelle == '+'|| *ptr_quelle == '-')
    
      //kopiere chars nach string        
      *p++ = *ptr_quelle++; 
    
      // Wandle string in einen double-Wert um 
      // und gebe diesen dann zurück an den Aufrufer 
    
      sscanf (string, "%lf", &value); 
      return value; 
     } 
    
    // Nichts gefunden? 
    return 0.0; 
    }
    

    Dankeschön schonmal!

    krishna



  • Du hast beim Kopieren der Zahl in das temporäre Array den Null-Terminator vergessen - und dort stand wohl zufällig noch etwas im Array, was als Ziffer einzuordnen ist.



  • Danke!

    ..Da wäre ich warscheinlich nicht so schnell drauf gekommen...
    -war der Krise schon verdammt nah....


Anmelden zum Antworten