Problem mit do-while [gelöst]
-
Hallo, ich habe ein kleines Problem.
Sobald die do-while Schleife das erste mal beginnt muss ich einmal enter betätigen bevor printf angezeigt wird und alles seinen erwarteten Ablauf nimmt. Das Löschen des Tastaturpuffers habe ich aus der FAQ kopiert, verstehen tue ich es aber nicht ganz. Bin noch ganz grün hinter den Ohren.
Ich nutze KDevelop auf Debian Etch.
#include <stdio.h> int main() { typedef struct //Struktur, eine benutzerdefinierter Variablentyp, wird deklariert { char artikel[32]; //char Typ wird Strukturvariable artikel zugewiesen int anzahl; //int Typ wird Strukturvariable anzahl zugewiesen float preis; //float Typ wird Strukturvariable preis zugewiesen } lager; //durch typedef wird die Struktur als Datentyp mit dem Namen lager deklariert lager bestand; //die Variable bestand mit dem Typ lager wird deklariert int eingabe, c; do { while ((c = getchar()) != EOF && c != '\n'); //Lösche Tastaturpuffer printf("Artikelname eingeben: "); eingabe = scanf("%s",&bestand.artikel); } while (eingabe == 0); do { while ((c = getchar()) != EOF && c != '\n'); //Lösche Tastaturpuffer printf("Artikelbestand eingeben: "); eingabe = scanf("%i",&bestand.anzahl); } while (eingabe == 0); do { while ((c = getchar()) != EOF && c != '\n'); //Lösche Tastaturpuffer printf("Artikelpreis eingeben: "); eingabe = scanf("%f",&bestand.preis); } while (eingabe == 0); }
-
mrt181 schrieb:
Hallo, ich habe ein kleines Problem.
Sobald die do-while Schleife das erste mal beginnt muss ich einmal enter betätigen bevor printf angezeigt wird
getchar() nimmt die Eingabe ja nur mit Enter.
-
okay, aber warum dann nur einmal zu beginn und auch nicht mehr wenn die schleife erneut durchlaufen wird?
-
Weil du zu beginn nichts im Tastaturpuffer hast, was getchar() auslesen könnte. Deswegen wartet getchar() eben auf eine Eingabe.
-
ja, okay irgendwie logisch.
Wie kann ich denn in meinem Programm etwas in den Puffer setzen, damit ich nicht während der Ausführung zu Beginn enter drücken muss?
-
setz' doch das while ((c = getchar()) != EOF && c != '\n'); hinter die scanf's
-
ja super, vielen Dank, wieder was gelernt, man das wir noch ein langer weg
-
mrt181 schrieb:
man das wir noch ein langer weg
Du hast in deinem ersten Beitrag hier eine klare, gut formulierte Frage gestellt und vorher die FAQ gelesen. Da mach ich mir bei dir wenig Sorgen über deinen Weg
PS: Sicher, dass die Struktur innerhalb von main() deklariert werden soll?
-
nein, habe ich jetzt aber vor main gesetzt, ist eh nur eine Übung für die Klausur bei meinem tollen Dozenten