Sitzung: Jeden Freitag ab 14:30 s.t. online. Falls ihr den Link haben wollt, schreibt uns.

C-Kurs/String to Double

Mithilfe der Funktion strtod aus dem Header <stdlib.h> lassen sich aus Strings wie "3.456" Werte vom Typ double extrahieren. Die Verwendung dieser Funktion ist nicht ganz einfach und will geübt sein. Ihr Prototyp lautet wie folgt:

double strtod(const char *nptr, char **endptr);

Wie der zweite Parameter zu verwenden ist, erschließt sich aus der Manpage (siehe strtod-Seite der Opengroup und # LC_ALL= man strtod auf der Konsole) und aus oberflächlichem Verständnis der internen Funktionsweise.

(1) Mit diesem Wissen sollst du folgendes Programm vervollständigen:

Dabei ist es speziell deine Aufgabe die Funktion "string_to_double" zu implementieren. Diese Funktion bekommt zwei Parameter übergeben. Der Erste ist der Text, der eine Zahl des Typs double enthält. Aus diesem Text soll mittels der Funktion "strtod" der entsprechende double-Wert extrahiert werden. Dieser Wert soll in den output-Pointer, der den zweiten Parameter darstellt, gespeichert werden. Dabei soll eine Fehlerbehandlung stattfinden. Schau dir dazu unter anderem die Fehler an, die in der Manpage zu finden sind und überlege dir noch weitere mögliche Randbedingungen. Als Rückgabe soll diese Funktion einen Error als Integer-Wert liefern. Ist kein Fehler aufgetreten, so soll 0 zurückgegeben werden. Alle anderen Error-Codes kannst du frei wählen.

 #include <stdio.h> /* for printf */
 
 int string_to_double(char const *text, double *output) {
     /* IMPLEMENT ME */
 }
 
 int main() {
     double d;
     int const error = string_to_double("4.567", &d);
 
     printf("Error: %s\n"
         "Result: %f\n",
         error ? "yes" : "no",
         d);
     return 0;
 }

(2) Zusatzfrage: Wie sieht es mit der const correctness von strtod aus? An welchen Stellen fehlt ein const? Wie sähe dann der korrekte Prototyp aus?