C Code funktioniert nicht?
Hallo,
Ich lerne gerade C.
Warum funktioniert dieser Code nicht?
Das Programm soll je nach Eingabe von Fahrenheit nach Celsius oder umgekehrt umrechnen. Dafür wollte ich in eine Variable 'einheit' vom Datentyp 'char' die Einheit festlegen lassen und abhängig davon die Temperatur berechnen lassen. Aber das Programm ignoriert den entsprechenden scanf-Befehl. Warum?
Hier das Ergebnis.
1 Antwort
Rein technisch gesehen, macht das Programm genau das, was du sagst, dass es machen soll:
- lese double ein
- lese char ein
Deine Eingabe (stdin) hat vor dem ersten scanf wahrscheinlich so ausgesehen:
"6.9\n"
^^^ ------ double (6.9)
^^ ---- char (Zeilenumbruch)
Im input-buffer liegt also die Zahl und ein Zeilenumbruch. Mit dem scanf hast du nur die Zahl "weggelesen", es ist also immer noch der Zeilenumbruch (char) in stdin und der wird mit dem nächsten Aufruf dann eingelesen.
Um das zu lösen, könntest du einfach noch ein "\n" im scanf hinter das machen, was du einlesen willst oder du liest dannach einfach so lange weiter, bis du es gefunden hast (was ich machen würde).
Könnte also so aussehen:
int c; // Variable um den Rest "wegzulesen"
printf("Wert für Temperatur: ");
scanf("%lf", &temp);
while ((c = getchar()) != '\n' && c != EOF);
printf("[C]elsius oder [F]ahrenheit: ");
scanf("%c", &einheit);
while ((c = getchar()) != '\n' && c != EOF);
printf("Einheit: %c", einheit);
die Überprüfung von EOF (end of file) ist, dass es keine Endlosschleife wird, falls es ein anderes Trennzeichen gibt.
Und wenn du es jetzt richtig ordentlich machen wolltest, könntest du die while-Schleife noch in eine Funktion packen, dass du das nicht immer kopieren musst :D