atoi /atof fragen

netrobot

Erfahrenes Mitglied
atoi---- wenn es glatt laüft, liefert die funktion den konvertierten Wert zurück, wenn die zukonvertiertende zeichenkette keine zahl ist, dann liefert 0 zurück, aber wenn die zukonvertiertende zeichenkette zufällig 0 ist?

atof----was liefert die zurück beim fehlerfall? es wird ein overflow auftreten, wie kann ich dann abfangen?
 
The atof() function converts the initial portion of the string pointed
to by nptr to double. The behaviour is the same as

strtod(nptr, (char **)NULL);

except that atof() does not detect errors.
Also strtof() bzw. strtol() benutzen.
 
fehler kann nicht abgefangen werden

Beispiel code:
void main( void )
{
char *string, *stopstring;
double x;
//string = "3.1415926This stopped it";
//string = "3.1415926";
string ="abc" ;
x = strtod( string, &stopstring );
printf( "string = %s\n", string );
printf(" strtod = %f\n", x );
printf(" Stopped scan at: %s\n\n", stopstring );

getchar();
}

ergebnis aufm Bildschirm:
string = abc
strtod = 0.000000
Stopped scan at: abc

bei richtiger Eingabe, z.b. string = "0.0";
string = 0.0
strtod = 0.000000
Stopped scan at:

ich kann nicht anhand strtod = 0.00000 den fehler abfangen
 
Das Problem ist nicht ganz trivial. Aber du kannst einfach scannen ob der String nur den ASCII-Code für "0" und den für "." enthält. Wenn du es ganz genau nehmen willst kannst du noch überprüfen ob er genau einen "." enthält.
Einfach im vielleicht-Fehler-Fall eine Schleife über alle chars. Wenn die chars alle "0" sind und maximal ein "." dabei ist, ist alles ok. Falls nicht weisst du, dass es ein Fehler war.
 
Zurück