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)
 
 
(3 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 41: Zeile 41:
 
  }
 
  }
 
   
 
   
(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?
+
(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?
  
 
Statt
 
Statt

Aktuelle Version vom 5. März 2013, 17:37 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 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.