B.3 Antworten und Lösungen zu Kapitel 4
-
Hier wurde der Adressoperator bei scanf() vergessen:
// kap004/loesung001.c
#include <stdio.h>
int main(void) {
int iVar = 0;
printf("Bitte eine Ganzzahl eingeben: ");
int check = scanf("%d", &iVar); // mit Adressoperator
if( check != 1 ) {
printf("Fehler bei scanf...\n");
return 1; // Programm beenden
}
printf("%d Wert(e) eingelesen; ", check);
printf("der eingegebene Wert lautet: %d\n", iVar);
return 0;
} -
Eine einfache Musterlösung könnte wie folgt aussehen:
// kap004/loesung002.c
#include <stdio.h>
int main(void) {
double cel = 0.0;
printf("Temperatur in Celsius: ");
int check = scanf("%lf", &cel );
if( check != 1 ) {
printf("Fehler bei der Eingabe ...\n");
return 1;
}
double kelvin = cel + 273.15;
double fahrenheit = (cel*9)/5+32;
printf("%lf Grad Celsius sind ...\n", cel);
printf("%lf Kelvin\n", kelvin);
printf("%lf Grad Fahrenheit\n", fahrenheit);
return 0;
}Das Programm sieht bei der Ausführung folgendermaßen aus:
Temperatur in Celsius: 30
30.000000 Grad Celsius sind ...
303.150000 Kelvin
86.000000 Grad Fahrenheit -
Die Ausgabe wurde als Kommentar hinzugefügt:
int i = 1;
printf("i = %d\n", i--); // i = 1
printf("i = %d\n", ++i); // i = 1
printf("i = %d\n", i++); // i = 1
printf("i = %d\n", ++i); // i = 3 -
Bei der impliziten Typumwandlung nimmt der Compiler automatisch die Konvertierung von einem Datentyp zum anderen nach einem Regelwerk vor.
-
Mit der expliziten Typumwandlung kann der Programmierer selbst eine Umwandlung von einem zum anderen Datentyp erzwingen. Eine explizite Typumwandlung sollten Sie immer vornehmen, wenn bei einer Umwandlung Speicherinformationen verloren gehen könnten (beispielsweise zwischen Gleitpunktzahlen und Ganzzahlen).
-
Die explizite Umwandlung wird mithilfe des Cast-Operators durchgeführt:
(typ) ausdruck
Dabei wird immer zuerst ausdruck ausgewertet, ehe der in ausdruck zurückgegebene Wert in den Datentyp typ konvertiert wird.