C-Kurs/String to Double/Musterlösung: Unterschied zwischen den Versionen
< C-Kurs | String to Double
Nighoo (Diskussion | Beiträge) K (verschob „Ckurs/String to Double/Musterloesung“ nach „Ckurs/String to Double/Musterlösung“) |
PaulG (Diskussion | Beiträge) K (verschob „Ckurs/String to Double/Musterlösung“ nach „C-Kurs/String to Double/Musterlösung“) |
(kein Unterschied)
| |
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.