frage zur while schleife



  • @crass

    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 vor

    printf("(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


Anmelden zum Antworten