Zum Inhalt springen
Sitzung: Jeden Freitag in der Vorlesungszeit ab 16 Uhr c. t. im MAR 0.005. In der vorlesungsfreien Zeit unregelmäßig (Jemensch da?). Macht mit!

C-Kurs/String to Double: Unterschied zwischen den Versionen

Aus FreitagsrundenWiki
Pipping (Diskussion | Beiträge)
Aufgabe zur API von strtod v1
 
Ugene (Diskussion | Beiträge)
KKeine Bearbeitungszusammenfassung
Zeile 4: Zeile 4:
  double strtod(const char *nptr, char **endptr);
  double strtod(const char *nptr, char **endptr);


Wie das zweite Parameter zu verwenden ist, erschließt sich aus der Manpage (siehe [http://www.opengroup.org/onlinepubs/000095399/functions/strtod.html strtod-Seite der Opengroup] und <tt># LC_ALL= man strtod</tt> auf der Konsole) und aus oberflächlichem Verständnis der internen Funktionsweise.
Wie der zweite Parameter zu verwenden ist, erschließt sich aus der Manpage (siehe [http://www.opengroup.org/onlinepubs/000095399/functions/strtod.html strtod-Seite der Opengroup] und <tt># LC_ALL= man strtod</tt> auf der Konsole) und aus oberflächlichem Verständnis der internen Funktionsweise.


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

Version vom 8. September 2010, 20:02 Uhr

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:

#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 eigentlich ein const? Wie sähe dann der korrekte Prototyp aus?