frage zur while schleife
-
fflush kann man nur auf Ausgabe Ströme anwenden, nicht auf Eingabe Ströme! fflush(stdin); ist nicht erlaubt
@<steffen>
stell dir mal den Tastatur Buffer vorprintf("(j/n) eingeben:");
eingabe: j\n -> Tastaturbuffer: j\n
scanf liest nun ein Zeichen
Tastaturbuffer: \n
nun liest scanf beim nächsten mal \n
was natürlich != 'j' ist
-
ich habs grad mal getestet...
obs erlaubt ist oder nicht, mit fflush(stdin) funkts bei mir
-
hier gehts aber um ANSI-C nicht um das was dein Compiler darunter versteht
-
schaut mal in die konsolen FAQ dort steht wie man den buffer löscht
zu fflush(stdin) gibt es auch einen ANSI C FAQ Beitrag.
das lesen der FAQ würde ich ALLEN empfehlen
-
@kingruedi
wieso steht im tastatur buffer nach scanf \n?
@shade of mine
wenn du mit konsolen FAQ die FAQ - DOS und Win32-Konsole meinst
da steht aber irgendwie nix zum buffer löschen.danke
-
du <Enter> drückst, um die Eingabe abzuschließen...
du liest nur ein char ein, <Enter> ('\n') ist ein zweiter character
-
und wie krieg ich das problem nun gelöst?
PS: pascal war doch was geiles....
-
char eingabe='j'; while(eingabe=='j') { printf("hallo\n"); printf("nochmal?(j/n)\n"); char buffer[200]; scanf("%s",buffer); eingabe=*buffer; }
so zB
hoffe des is jetzt kein undefiniertes verhalten[ Dieser Beitrag wurde am 17.02.2003 um 21:16 Uhr von crass editiert. ]
-
Original erstellt von crass:
**hoffe des is jetzt kein undefiniertes verhalten
**In statische Puffer ohne Längenkontrolle zu lesen halte ich für keine sehr tolle Idee (man fgets).
Keione Fehler aber IMHO trotzdem wichtig: Um einfache Stringliterale auszugeben ist printf auch nicht geeignet (auch wenn man es so benutzten kann). Besser wäre (f)puts. Vor einem scanf/fgets könntest Du auch gleich die Ausgabe erzwingen ('fflush (stdout)') und Variablen will man in C am Blockanfang definieren (auch wenn man nicht mehr muss). Zum Lesen eines einzelnen Zeichens sei hier die Funktion getchar nochmal explizit genannt.
-
klappt jetzt alles
danke schön