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

K
K (verschob „Ckurs/String to Double“ nach „C-Kurs/String to Double“)
 
(3 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 5: Zeile 5:
  
 
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.
 
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.
 +
<br><br>
 +
(1) Mit diesem Wissen sollst du folgendes Programm vervollständigen: <br><br>
 +
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.
  
(1) Mit diesem Wissen sollst du folgendes Programm vervollständigen:
+
<pre>
 
 
 
  #include <stdio.h> /* for printf */
 
  #include <stdio.h> /* for printf */
 
   
 
   
Zeile 24: Zeile 27:
 
     return 0;
 
     return 0;
 
  }
 
  }
 +
</pre>
  
(2) Zusatzfrage: Wie sieht es mit der ''const correctness'' von strtod aus?  An welchen Stellen fehlt eigentlich ein <tt>const</tt>?  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 <tt>const</tt>?  Wie sähe dann der korrekte Prototyp aus?

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

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?