[help]Problem mit Enter bei scanf in c
Timmää 11.01.2008 - 11:05 1668 10
Timmää
Big d00d
|
hi erstmal ich und der rest meiner Klasse haben ein Problem mit einer programmier Aufgabe so sieht sie aus: 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 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
|
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: if (cZeichen == 13) {
/* do something */
}
hth
|
UncleFucka
-
|
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
|
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
|
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
|
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
ModeratorHoffnungsloser Optimist
|
Ihr wollt Zahlen einlesen oder ein "a" - also im allgemeinen Fall einen String. Hier ein paar hilfreiche Fragmente: 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
|
del
Bearbeitet von Lecithin am 11.01.2008, 20:45
|
3mind
mimimi
|
habt ihr's jetzt eigentlich schon hinbekommen?
|
Marcellus
OC Addicted
|
#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
|
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.
|