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/Musterlösung: Unterschied zwischen den Versionen

(Init Lösung v1)
(kein Unterschied)

Version vom 2. September 2010, 13:00 Uhr

(1) [..] folgendes Programm vervollständigen:

#include <errno.h> /* for errno */
#include <stdlib.h> /* for strtod */
#include <string.h> /* for strlen */
#include <stdio.h> /* for printf */

int string_to_double(char const *text, double *output) {
    char * after_last;
    double number;

    errno = 0;
    number = strtod(text, &after_last);

    if ((number == 0.0)
            && ((after_last == text)
                || (errno == EINVAL))) {
        return 1;
    }

    if (errno == ERANGE) {
        return 2;
    }

    if (after_last != text + strlen(text)) {
        return 3;
    }

    *output = number;
    return 0;
}

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?

Statt

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

sollte es

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

heißen.