Wie genau erklärt sich diese Funktion (stdin buffer leeren)?

centhron69

Grünschnabel
Folgendes ist eine Funktion um den stdin buffer zu leeren.

Code:
char dummy;
while ((dummy = getchar()) != '\n' && dummy != EOF);

Eigentlich meine ich das diese Funktion gleichzusetzen ist mir folgender:

Code:
while(dummy != '\n' && dummy != EOF)
{
dummy = getchar();
}

Allerdings funktioniert die zweite nicht. Wo ist der Unterschied?


Hier meine Ausgangssituation, fals ihr was besseres kennt:

Das Terminalprogramm erstellt eine Menüstruktur. Wenn ich nun den stdin buffer nicht leere und ein Zeichen beim scanf eingebe, komm ich in eine Endlosschleife. Das Programm sollte Standartkonform sein, deswegen nutze ich nicht getch().


Code:
char choice;
char dummy;

while(choice != '9')
	{
		printf("Menüstruktur\n");	
		scanf("%c", &choice);

		//Buffer leeren
		while ((dummy = getchar()) != '\n' && dummy != EOF);	

		switch(choice)
		{
		//switchanweisung
		}

Vielen dank für die Hilfe :)
 
Hi.
Folgendes ist eine Funktion um den stdin buffer zu leeren.

Code:
char dummy;
while ((dummy = getchar()) != '\n' && dummy != EOF);

Eigentlich meine ich das diese Funktion gleichzusetzen ist mir folgender:

Code:
while(dummy != '\n' && dummy != EOF)
{
dummy = getchar();
}

Allerdings funktioniert die zweite nicht. Wo ist der Unterschied?
Wie ist denn dummy initialisiert?

Gruß
 
Stimmt natürlich :D

Hier nochmal die korrekte lange Funktion:

Code:
//Buffer leeren
		char dummy = getchar();
		while(dummy != '\n' && dummy != EOF)
		{
			dummy = getchar();
		}
 
Du könntest natürlich auch einfach eine do .. while Schleife verwenden. Dann mußt du nicht initialisieren und auch nicht getchar() zweifach aufrufen.

Gruß
 
Zurück