Wo ist der Unterschied in den Codes?
-
Hallo ihr Lieben,
ich habe folgende Aufgabe:
"Lies mit scanf ein Wort, ein Zeichen und eine Fließkommazahl ein und gibt ihr die Inhalte mit printf wieder aus."Das ist Code 1:
#include<stdio.h> int main() { char wort[20]; char c; double d; printf("Wort: "); scanf("%s", wort); printf("Zeichen: "); scanf("%c", &c); printf("Fliesskommazahl: "); scanf("%lf", &d); printf("Wort: %s\nZeichen: %c\nFliesskommazahl: %lf\n", wort, c, d); return 0; }
Das ist Code 2:
#include <stdio.h> int main(void) { char wort[30]; char c; float x; printf("Wort , Zeichen und Zahl eingeben: "); scanf("%s %c %f", wort, & c, & x); printf(" Eingegeben wurde: %s, %c, %f\n", wort, c, x); return 0; }
Code 1 funzt NICHT, Code 2 schon.
Warum klappt der erste Code nicht?Vielen Dank für ejden Hinweis.
Liebe Grüße
Hawaiihemd
-
@Hawaiihemd Code 2 funktioniert (so wie du wünscht), weil im Formatstring von
sscanf
vor dem %c ein Leerzeichen ist.Wenn du im Code 1 beim Zeichen ein
" %c"
(Leerzeichen vor dem % ) schreibst, geht der auch.Das Leerzeichen im Formatstring überliest Whitespace (Leerzeichen, Tabulatoren, Zeilenvorschub).
%s, %f, %d (und andere Intformate) machen das automatisch.
%c nicht, du könntest ja das '\n' von der Enter-Taste lesen wollen.Im Code 1 kannst du für das Zeichen mal eine Ziffer nehmen, dann läuft das Programm weiter.
-
@DirkB Okay, mit Leerzeichen geht es tatsächlich. Aber die letzte Zeile wird trotzdem nicht ausgegeben.
printf("Wort: %s\nZeichen: %c\nFliesskommazahl: %lf\n", wort, c, d);
Diese Zeile scheint er immer noch zu ignorieren...
-
@Hawaiihemd Das kann auch an falschen Eingaben oder nicht aktuellem Programm (exe passt nicht zum Code) liegen.