frage zur while schleife
-
hi,
kann mir einer sagen wieso das hier nicht funktioniert?#include <stdio.h> int main(int argc, char *argv[]) { char eingabe='j'; while(eingabe=='j'){ printf("hallo\n"); printf("nochmal?(j/n)\n"); scanf("%c",&eingabe); } return 0; }
-
ich frage mich wieso er eingabe nicht einliest?
danke für jede hilfe
-
versuchs mal mit fflush(stdin); vor dem scannen..
schätz mal da is noch dreck im eingabe-stream
-
ich halte dich net fürn idiot, aber will vorsichtshalber mal fragen, ob du überhaupt enter drückst? ansonsten müsste das gehn...
-
hat fflush denn was mit scanf zu tun?? ich dachte eig. nicht, kann mich aber auch irren (man lernt immer dazu)
cu todo
-
hatte mal so ein ähnliches prob, nachm flushen isses gelaufen...ansonsten seh ich auch keinen Fehler bei dem Code..an irgendwas musses ja liegen oder er drückt wirklich nicht enter
-
also das mit dem einlesen klappt jetzt.Hab was vergessen.
aber eigentlich solte er die schleife doch solange laufen lassen bis eingabe einen anderen wert als j einnimmt oder?
hier mal meine konsolen ausgabe:
bash-2.05a$ ./test1
hallo
nochmal?(j/n)
j
hallo
nochmal?(j/n)
bash-2.05a$
wieso bricht er ab?ich hab doch j eingegeben?
sorry wenn ich mich ein bissel bloede anstelle :p
-
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