2tes scanf wird übergangen?



  • wenn ich 2 scanfs hinternander habe, wird das 2te übergangen...was mach ich dagegen? danke!



  • wie wärs mit etwas code?



  • Zwischendurch den Eingabepuffer ausfegen 😉 (vermutlich waren nach dem ersten Aufruf noch Zeichen im Puffer, die dann beim zweiten Aufruf abgearbeitet wurden)



  • auf keinen fall stdin flushen! das ist undefiniertes verhalten und dein programm wird hoechstwahrscheinlich crashen.

    besser: while (getchar() != '\n');
    das killt den rest der im puffer befindlichen zeile



  • c.rackwitz schrieb:

    auf keinen fall stdin flushen! das ist undefiniertes verhalten und dein programm wird hoechstwahrscheinlich crashen.

    besser: while (getchar() != '\n');
    das killt den rest der im puffer befindlichen zeile

    er mein do{scanf("%irgendwas", irgendwas1);}while (getchar() != '\n');



  • luser, lass dein mundwerk zu, wenn du keinen schimmer hast und lass das elende gespamme.



  • c.rackwitz schrieb:

    luser, lass dein mundwerk zu, wenn du keinen schimmer hast und lass das elende gespamme.

    tschuldigung 😞 aber meine zeile ist doch korrekto oder?? und ich habe mir gedacht dass die abbruchbedingung alleine vielleicht etwas zu wenig ist...

    waenn dich das irgendwas stoert dann schreibe ich es dir nochmal mit dem char c als beispiel:

    ...
    char c;
    do{scanf("%c", &c);}while (getchar() != '\n');
    ...
    

    ich wollte dich nicht angreifen oder sonstwas echt!!!
    TSCHULDIGUNG

    ps man kann das auch in einem makro loesen:

    #define FLUSH (keyboardBuffer)\
       while(( (keyboardBuffer) = getchar()) != '\n')
    


  • dein code ist sinnfrei.

    der OP wollte stdin gecleart haben, weil offensichtlich seine scanfs nicht so laufen wie gedacht.
    dazu hab ich in meinem ersten post einen codeschnipsel gezeigt, mit dem das geht.

    was du hingegen fabrizierst, halte ich persoenlich fuer sehr unfaehig. code muss nicht nur richtig sein, er muss das machen was man will.



  • Schau dir mal ganz genau deine Schleife an - diese liest so lange in die selbe Variable, bis direkt hinter der Eingabe ein Newline kommt. In deinem char-Beispiel: lies erstes Zeichen, teste zweites Zeichen auf '\n', lies drittes Zeichen,...

    Richtig wäre eher so etwas:

    scanf("%xyz",&var1);
    while(getchar()!='\n');//leere while()-Schleife - holt alles bis zum Newline aus dem Eingabpuffer
    scanf("%abc",&var2);
    


  • c.rackwitz schrieb:

    dein code ist sinnfrei.

    der OP wollte stdin gecleart haben, weil offensichtlich seine scanfs nicht so laufen wie gedacht.
    dazu hab ich in meinem ersten post einen codeschnipsel gezeigt, mit dem das geht.

    was du hingegen fabrizierst, halte ich persoenlich fuer sehr unfaehig. code muss nicht nur richtig sein, er muss das machen was man will.

    mal nachvollziehen:
    mit
    do{scanf("%c", &c);}while (getchar() != '\n');
    wird das SCANF AUF KEINEN FALL UEBERSPRUNGEN!!!
    und mein macro:
    #define FLUSH (keyboardBuffer)\
    while(( (keyboardBuffer) = getchar()) != '\n')
    macht genau dass was du auch gesagt hast nur in einem makro halt!!

    kann es sein dass du irgendwie ne schwaere kindheit gehapt hast oder warum gehst du auf alle gleich so los!!



  • wenn ich ehrlich sein soll, mir geht dabei einer ab, wenn ich begriffsstutzige menschen zusammenscheissen darf :p

    ich zitier mich mal:
    code muss nicht nur richtig sein, er muss das machen was man will.

    dein code macht nicht, was gefordert ist. "thema verfehlt" nennt sich das in der schule.



  • ok ich resigniere ich habs halt falsch verstanden! die frage wurde aber auch nicht besonders gut gestellt und das was meine zeile code macht ist auch nicht (sinngemaess) falsch das scanf wird nicht mehr überspungen![aber was schreib ich das nochmal du hast das ja bei meinem letzten post schon ignoriert] du hast gewonnen waenns dich gluecklich macht!



  • wobei natürlich schwachsinn ist, dass beim fflush(en) das programm "hoechstwahrscheinlich crashen" wird, höchstwahrscheinlich wird es funktionieren, es muss nur nicht, es ist halt nicht standardkonform.. aber so schwarz zeichnen wollen wir das doch nu nicht



  • fflush schrieb:

    wobei natürlich schwachsinn ist, dass beim fflush(en) das programm "hoechstwahrscheinlich crashen" wird, höchstwahrscheinlich wird es funktionieren, es muss nur nicht, es ist halt nicht standardkonform.. aber so schwarz zeichnen wollen wir das doch nu nicht

    Man kann froh sein wenn es "höchstwahrscheinlich crasht" denn das Verhalten für fflush(stdin) ist schlicht undefiniert. Ich bevorzuge da "crash early", da sieht man gleich was man für einen Murks gebaut hat.
    Bei manchen (mir ist jedenfalls nur der MS C-Compiler bekannt) Compilern ist fflush(stdin) eine Erweiterung, aber deswegen noch lange nicht Standard C.


Anmelden zum Antworten