[c] enter von scanf wird gewertet

Mister master

Erfahrenes Mitglied
hallo
bei dieser Aufgabe (Zahlen einlesen und kontrollieren ob sie ungerade oder gerade sind, klein a bricht ab):

Code:
#ifndef STDIO_H
#include <stdio.h>
#endif

int main(void)
{
	int iZahl = 0, iAnzahlgerade = 0, iAnzahlungerade = 0, iAlle = 0;
	char cZahl;
	printf("bitte geben sie beliebig viele Zahlen ein:\n");
	
	do
	{
		scanf("%c", &cZahl);
		iZahl = (int) cZahl;
		
		if(iZahl%2 == 0)
		{
			iAnzahlgerade++;
		}
		else
		{
			iAnzahlungerade++;
		}
	}
	while(cZahl != 'a');
	
	iAnzahlungerade--; //wegen 97 (a in ascii)
	printf("Gerade: %i \n", iAnzahlgerade);
	printf("Ungerade %i \n", iAnzahlungerade);
	return 0;
}

wird das Enter (wahrscheinlich) als gerade Zahl dazugerechnet, obwohl es eigentlich 13 in ascii wäre.
Kann mir bitte irgentjemand helfen?

PS: falls Professor anwesend: es tut mir leid. :)

thx im vorraus: die gesammte Klasse.
 
Du musst nur nach jedem aufruf von scanf den restlichen eingabepuffer leeren den dort ist dann noch das '\0' drin!

Also nach jedem aufruf:
fflush(stdin);
oder
mittels
char dummy[81];
und gets(dummy);
in den String einlesen!

Code:
#ifndef STDIO_H
#include <stdio.h>
#endif

int main(void)
{
	int iZahl = 0, iAnzahlgerade = 0, iAnzahlungerade = 0, iAlle = 0;
	char cZahl, dummy[81];
	printf("bitte geben sie beliebig viele Zahlen ein:\n");
	
	do
	{
		scanf("%c", &cZahl);
		iZahl = (int) cZahl;
		gets(dummy); // fast jeder Kompiler
                 fflush(stdin);   // koennte schwirigkeiten bringen!
		if(iZahl%2 == 0)
		{
			iAnzahlgerade++;
		}
		else
		{
			iAnzahlungerade++;
		}
	}
	while(cZahl != 'a');
	
	iAnzahlungerade--; //wegen 97 (a in ascii)
	printf("Gerade: %i \n", iAnzahlgerade);
	printf("Ungerade %i \n", iAnzahlungerade);
	return 0;
}
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück