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....