"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

[help]Problem mit Enter bei scanf in c

Timmää 11.01.2008 - 11:05 1668 10
Posts

Timmää

Big d00d
Avatar
Registered: Nov 2007
Location: linz
Posts: 222
hi erstmal

ich und der rest meiner Klasse haben ein Problem mit einer programmier Aufgabe
so sieht sie aus:


Zitat
Schreiben Sie ein Programm, welches Zahlen einliest.
Zählen Sie dabei wieviele gerade und ungerade Zahlen eingelesen wurden.

Das Programm soll bei Eingabe eines 'a'oder 'A' abbrechen und eine kleine
Statistik ausgeben.

Bsp.:
Anzahl ungerade Zahlen: 14

Anzahl gerade Zahlen: 10


hört sich einfach an aber irgendwie wird jedes enter als ungerade Zahl gewertet

source sieht zur Zeit so aus

Code:
int main (void)
{
	char cZeichen;
	int iGerade=0, iUngerade=0;
	
	printf("bitte Zahlen eingeben\n");
	
	
	do
	{
		
		scanf("%c", &cZeichen);
		if(cZeichen%2==0)
		{
			iGerade++;
		}
		else if(cZeichen%2==1)
		{
			iUngerade++;
		}
	}
	while(cZeichen!='a');

	
	
	printf("Anzahl gerade: %i\n", iGerade);
	printf("Anzahl ungerade: %i\n", iUngerade-1);
	
	
	return 0;
}

wir haben noch sehr wenig erfahrung und da unser lehrer auf Schikurs ist und gesagt hat wir können Internet zu hilfe nehmen ist das von daher kein Problem

tia, die 1ahit der htl wels
Bearbeitet von that am 11.01.2008, 19:45 ([quote] durch [code] ersetzt und Einrückung gefixt)

3mind

mimimi
Avatar
Registered: Sep 2004
Location: 1030
Posts: 1588
wenn ich das richtig verstanden habe, möchtet ihr feststellen wenn die Enter taste gedrückt wurde um beispielsweise eine sonderbehandlung durchzuführen.

versucht dies über den ASCII-code von Enter, nämlich 13:

Code:
if (cZeichen == 13) {
  /* do something */
}

hth

UncleFucka

-
Avatar
Registered: Jun 2002
Location: CH
Posts: 4737
du dividierst den ascii code des zeichens durch 2.. der ascii code entspricht nicht dem zahlenwert.

// mach ausm char cZeichen ein int cZeichen. und ne abfrage ob eh eine zahl angegeben ist und kein buchstabe.
btw. den zweiten if ast kannst dir sparen. wenn ne zahl nicht gerade ist ist sie ungerade. mehr möglichkeiten gibts net.

// bin mir grad net sicher ob das mit scanf geht mit int, wenn net dann nimm die atoi funktion. dann kriegst auch den integer wert.
Bearbeitet von UncleFucka am 11.01.2008, 11:13

3mind

mimimi
Avatar
Registered: Sep 2004
Location: 1030
Posts: 1588
Zitat von Uncle****a
du dividierst den ascii code des zeichens durch 2.. der ascii code entspricht nicht dem zahlenwert.

das auch, aber in dem fall stimmts sogar weil die ascii für ungerade/gerade auch ungerade/gerade ist. bei mehrstelligen zahlen geht das natürlich nimma :)

--> also überlegts euch einen alternativen weg Timmää :)

Shroom

Bloody Newbie
Avatar
Registered: Jan 2008
Location: -.-
Posts: 1
hallo, bin schulkollegin von timmää!

also, wir in der klasse stehen ham uns noch noch länger den kopf drüber zerbrochen, haben viel herumprobiert und sind mit unserem wissen(was zugegebener weise noch nicht sehr groß ist) ziemlich am ende!!
Hätte irgendwer von euch noch irendeinen anderen vorschlag, der uns weiterbringen könnte??

thx, im voraus für antworten!

__Luki__

bierernste Islandkritik
Avatar
Registered: Nov 2003
Location: gradec
Posts: 2984
Ich wuerde vor der Schleife eine IF-Abfrage machen, ob das Zeichen, das ich einlese kein "A", oder "a" ist (Einfach mit dem ASCII-Code).

Ist es ein "A" oder "a" -> Fehlermeldung, Exit. (zB).
Ist es keines: -> Zaehlen.

that

Moderator
Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11338
Ihr wollt Zahlen einlesen oder ein "a" - also im allgemeinen Fall einen String. Hier ein paar hilfreiche Fragmente:

Code:
char buf[20];
long z;
char *end;
...
scanf("%19s", buf);
if (strcmp(buf, "a") == 0 || strcmp(buf, "A") == 0)
   .... /* beenden */
z = strtol(buf, &end, 10);
if (*end != 0)
  ... /* keine gültige Zahl */

Lecithin

no half measures
Avatar
Registered: Aug 2005
Location: Wien
Posts: 585
del
Bearbeitet von Lecithin am 11.01.2008, 20:45

3mind

mimimi
Avatar
Registered: Sep 2004
Location: 1030
Posts: 1588
habt ihr's jetzt eigentlich schon hinbekommen?

Marcellus

OC Addicted
Avatar
Registered: Mar 2005
Location: ~
Posts: 1755
Code:
#include <ctype.h>
#include <stdio.h>

int main (void)
{
	char cZeichen;
	int iGerade=0, iUngerade=0;
	
	printf("bitte Zahlen eingeben\n");
	
	
	do
	{
		
		scanf("%c", &cZeichen);
                [B]if(! (isdigit((int)cZeichen) || "A" == toupper((int)cZeichen) ))continue;[/B]
		if(cZeichen%2==0)
		{
			iGerade++;
		}
		else if(cZeichen%2==1)
		{
			iUngerade++;
		}
	}
	while(cZeichen!='a');

	
	
	printf("Anzahl gerade: %i\n", iGerade);
	printf("Anzahl ungerade: %i\n", iUngerade-1);
	
	
	return 0;
}

Du kannst es mit der oben eingefügten zeile machen, oder mit sowas wie

scanf("%c\n", &...

Btw solltest du nicht ein char einlesen, sonst hast du nur einen Zahlenwert von maximal 255.

Maekloev

linux addicted
Avatar
Registered: Oct 2002
Location: Innsbronx
Posts: 920
euer problem hängt mit der pufferung der eingabe zusammen. lest euch mal die entsprechende seite des buches c von a bis z durch.

gibt's dort übrigens als openbook. meines erachtens als einsteigerbuch recht geeignet. vielleicht hilft's euch ja weiter.
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz