URL: https://www.overclockers.at/coding-stuff/helpproblem_mit_enter_bei_scanf_in_c_190310/page_1 - zur Vollversion wechseln!
hi erstmal
ich und der rest meiner Klasse haben ein Problem mit einer programmier Aufgabe
so sieht sie aus:
ZitatSchreiben 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
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; }
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 */ }
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.
Zitat von Uncle****adu dividierst den ascii code des zeichens durch 2.. der ascii code entspricht nicht dem zahlenwert.


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!
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.
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 */
del
habt ihr's jetzt eigentlich schon hinbekommen?
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; }
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.
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025