Eingabebuffer leeren - optionen



  • Den Typo im letzten Satz möchtest Du sicherlich noch korrigieren. 😉

    Wie dem auch sei. IMHO ist der Ton den der OP anschlägt ziemlich herablassend für ein Forum, dessen Thema explizit Standard C ist.
    Ich weiss auch gar nicht, warum Kohlmanns123 fflush(stdin) überhaupt erwähnt?! Wahrscheinlich hat der Mann einen Hals, wegen der mitunter schroffen Beiträge zu diesem Thema hier...

    Kohlmanns123 schrieb:

    Das fflush(stdin) funktioniert unter Windows, solange man nur Windows-Code schreibt, kann man auf den Standard pfeifen. Unter Windows ist es auch nicht, wie immer gesagt wird "undefiniertes Verhalten", sondern ein "Feature", was unter Windows legitim ist -> kein mögliches undefiniertes Verhalten.


  • Mod

    Nur so als Nebenbemerkung: Unter Linux ist fflush auf Eingabestreams durchaus auch definiert, zumindest seit ein paar Jahren. Der Endeffekt ist bloß nicht der, den die typischen fflush(stdin)-Nutzer erwarten. Und zwar aus den Gründen, die ich oben genannt habe, denn die Idee eines zentralen Eingabepuffers ist schlicht falsch.



  • SeppJ schrieb:

    Prinzipiell ja. Bringt aber nichts...

    Ja, da leckst mi!
    Ist mir auch noch nie aufgefallen! 🙄
    Ich hab' mich immer drüber geärgert, daß man zum Forenüberblick navigieren und scrollen muß, bis man zu den FAQs kommt und erinnere mich auch nicht immer an den Schnelltag rechts oben.
    Jetzt würde ich uns beide nicht wirklich informationsresistenten Nörglern zuordnen und möchte auch Gelegenheits- Forenbesucher nicht pauschal dort verorten.

    Also, entweder sind wir alle Deppen oder das Ding ist informationspsychologisch (gibt's das Wort überhaupt?) so ungünstig untergebracht, daß wir's allesamt überlesen. Das könnte geändert werden, dessen bin ich mir sicher.


  • Mod

    pointercrash() schrieb:

    Also, entweder sind wir alle Deppen oder das Ding ist informationspsychologisch (gibt's das Wort überhaupt?) so ungünstig untergebracht, daß wir's allesamt überlesen. Das könnte geändert werden, dessen bin ich mir sicher.

    Ich vermute wirklich, dass es eine psychologische Sache ist, aber ich habe keine Ahnung, wie es zu ändern wäre. Die Leute, die FAQ-Fragen stellen, wollen keine FAQ lesen. FAQs sind etwas für Poweruser, die sie aber naturgemäß selten brauchen.



  • Hallo,

    offensichtlich habt ihr das nicht mal ausprobiert, was ich relativ schade finde. Sorry für den Ton, falls sich dort jemand auf den Schlips getreten gefühlt hat. Deshalb muss man noch lange nicht irgendwelchen Müll von sich geben! 😉

    Dann mache ich mal den First Step.

    Im Testfall 1 sind die setbufs u. memset ausgeklammert.
    Im Testfall 2 so wie unten dargestellt.

    Betriebssystem: Windows 8.1 Compiler GCC, IDE Codeblocks

    Ihr könntet das ja bei euch einfach mal testen, ob es funktioniert, speziell die Linux/Unix User. Würde mich aufjedenfall interessieren.

    Der Code:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        static char pb[BUFSIZ];
        char buffer1[10];
        char buffer2[10];
    
        // Umleiten
        setbuf(stdin, pb);
    
        // Eingabe 1
        puts("Bitte geben Sie etwas ein:\n");
        fgets(buffer1, sizeof(buffer1), stdin);
    
        // Löschen und erneu umleiten
        memset(pb, 0, sizeof(pb));
        setbuf(stdin, pb);
    
        // Eingabe 2
        puts("Bitte geben Sie noch etwas ein:\n");
        fgets(buffer2, sizeof(buffer2), stdin);
    
        // Ausgabe
        printf("Eingabe 1: %s\n", buffer1);
        printf("Eingabe 2: %s\n", buffer2);
    
        return 0;
    }
    

    Test 1:

    Bitte geben Sie etwas ein:
    
    HalloWelt12345
    Bitte geben Sie noch etwas ein:
    
    Eingabe 1: HalloWelt
    Eingabe 2: 12345
    
    Process returned 0 (0x0)   execution time : 11.786 s
    Press any key to continue.
    

    Test 2:

    Bitte geben Sie etwas ein:
    
    HalloWelt12345
    Bitte geben Sie noch etwas ein:
    
    TEST
    Eingabe 1: HalloWelt
    Eingabe 2: TEST
    
    Process returned 0 (0x0)   execution time : 10.816 s
    Press any key to continue.
    

    P.S. Ich hatte doch glatt vergessen, dass ich hier etwas geschrieben habe. Besser spät als nie 🙂

    Grüße

    Kohlmanns123


  • Mod

    Kohlmanns123 schrieb:

    offensichtlich habt ihr das nicht mal ausprobiert, was ich relativ schade finde.

    Was ausprobiert? Dein Programm mit undefiniertem Verhalten? Mag bei dir funktionieren, undefiniert heißt auch, dass es manchmal funktionieren darf. Es bleibt aber weiter undefiniert. Auch wenn dir das als Antwort nicht passt, ist es trotzdem die korrekte Antwort.



  • Hallo,
    wenn man etwas behauptet, dann begründet man dies mit einem Verweis, was du offensichtlich nicht machst. Ich nehm dir das nicht übel, aber sowas lernt man bereits in der Schule.

    Von einem undefinierten Verhalten ist nirgendwo die Rede.
    Da ich den Buffer zusätzlich Static deklariert habe, ist dieses ebenso hinfällig:

    You must make sure that the space that buf points to still exists by the time stream is closed, which also happens at program termination.
    

    Quelle: http://linux.die.net/man/3/setbuf

    Wenigstens habe ich getestet, womit du offensichtlich überfordert bist, oder in deinen alten Strukturen gefangen.

    Oder hast du Angst, mein Programm würde deine Computer Hardware zerstören?

    Schönen Abend noch.


  • Mod

    Wow, pöbelst du immer Leute an, die dir helfen? Dann hilf dir doch selber, wenn du sowieso alles besser weißt.



  • Von einem undefinierten Verhalten ist nirgendwo die Rede.

    Du kannst nicht lesen.

    bereits in der Schule.

    Da gehörst du auch hin.

    Da ich den Buffer zusätzlich Static deklariert habe, ist dieses ebenso hinfällig:

    Totaler Schwachsinn. Das was du gelesen hast, hast du auch nicht verstanden.

    du offensichtlich überfordert bist

    Dümmlich naiver Versuch, doch noch jemanden zu überreden, Zeit für deine Schwachsinnsthesen zu vergeuden.



  • @Kohlmanns123

    So laufen hier leider SEHR viele Threads ab, es einfach nur ein Armutszeugnis dises mittlerweile bedeutsamen Forums. du kriegst NUR solche Antworten egal was abgeht.
    Teilweise macht es Spaß Konversationen zu verfolgen, am Ende sind es IMMER die Personen die länger in diesem Forum sind die sich besser fühlen und einfach nur scheiß Antworten geben.

    Wow, pöbelst du immer Leute an, die dir helfen?

    Da pöbelt jemand ganz anderes. Und bei dem Schweinchen ist eh immer alles Schwachsinn...


Anmelden zum Antworten