Zeichen in schleife prüfen
-
Hi,
ich bin neu in Sachen C Programmierung.
Habe mich zuvor etwas mit VB.net und C++ auseinander gesetzt.
Bin jetzt jedenfals zu C gekommen und habe ein kleines Problem :Ich möchte gerne prüfen ob 2 Zahlen eingegben werden.
Mein Code sieht folgendermaßen aus :#include <stdio.h> int main(void) { int a,b,check; check =0; while(check !=2) { printf("\nBitte 2 Zahlen eingeben :\n"); check =scanf("%d %d",&a,&b); getchar(); printf("\nInfo : a:%d b:%d check:%d\n",a,b,check); } printf("Die beiden Zahlen sind : %d und %d\n",a,b); return 0; }
Wenn ich direkt 2 Zahlen eingebe passt alles, gebe ich aber einen Char und eine Zahl oder anderes rum ein wird mir 2mal folgendes Ausgegeben : "Bitte 2 Zahlen eingeben :".
Ich versehe nicht warum die Schleife 2mal durchlaufen wird, obwohl ich nichts eingebe.Hoffe ich habe mich verständlich ausgedrückt
Wäre nett wenn mir jemand helfen könnte.
mfg
Edit:
Sollte es relevatn sein, ich nutze Ubuntu 10.04 und den GCC compiler.
-
Hallo,
misconduct schrieb:
Ich versehe nicht warum die Schleife 2mal durchlaufen wird, obwohl ich nichts eingebe.
Hoffe ich habe mich verständlich ausgedrücktDas liegt an deiner scanf/getchar Kombination.
Die Funktion scanf liest so lange aus dem Eingabepuffer ein, wie die Angaben im Formatstring mit dem Inhalt des Eingabepuffers übereinstimmen.
Bei Nichtübereinstimmung wird abgebrochen, dabei bleibt der nichteingelesene Rest im Eingabepuffer drin.
Davon schnappt sich ein Zeichen getchar, danach können wieder gültige Zeichen für scanf folgen, etc.
Mach einfach den Eingabepuffer leer, nach jedem check != 2.
(Selbst wenn check == 2 ist, können sich noch irgendwelche Zeichen im Puffer befinden,
zumindest das '\n')
-
hi,
danke für die antwort.
Mein Problem ist, das ich nicht weis wo genau der eingabepuffer "abgelegt" ist ?
Ist das in getchar(); ?ich habe probiert den inhalt von getchar() in ein array vom typ char zu speichern, dessen größe auszulesen (mit sizeof) und jedes zeichen des arrays mit '\0' zu beschreiben, allerdings weis ich nicht was der eingebepuffer ist, bzw wo erabgelegt ist und wie ich ihn beschreiben kann.
mittels getchar(i) ='\0'; hatte ich keinen erfolg.würde mich um antworten freuen.
mfg
-
Wo der Puffer ist, ist nicht so wichtig (Es gibt den Zeiger stdin vom Typ FILE* der zeigt auf das ganze Strukturgedöns. Die Funktion getchar() ist das gleiche wie getc(stdin), es wird also von stdin eingelesen.)
Wichtiger ist es zu wissen, wie du den Puffer leer bekommst. Guckst du Code ganz unten auf der Seite:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39349.html
-
hmmm...
der code funktioniert, und so etwas habe ich auch schon beim suchen gefunden, nur habe ich den nicht probiert, da ich dachte das da noch was fehlt.
ich verstehe nicht warum dadurch mein puffer gelehrt wird.
es wird doch nur getchar() geprüft oder ?
und so lange das weder EOF noch '\n' ist wird doch .... irgendwie nichts gemacht oder ? schließlich fehlt eine zuweisung , ala puffer = '\0' ?wäre nett wenn du mir das noch erklären könntest, funktioniert jedenfalls problemlos. danke schonmal dafür!
mfg
-
getc, scanf, fgets, getchar, etc, entfernen die erfolgreich eigelesenen Bytes aus dem Puffer.
-
Big Brother schrieb:
getc, scanf, fgets, getchar, etc, entfernen die erfolgreich eigelesenen Bytes aus dem Puffer.
Buffer leeren (s. FAQ):
int c; // int c, nicht char c. while ((c = getchar()) != EOF && c != '\n');
-
bufffffffffffffffer schrieb:
Buffer leeren (s. FAQ):
int c; // int c, nicht char c. while ((c = getchar()) != EOF && c != '\n');
Woooow!!!