fflush(stdin) verhält sich komisch

Tutorials.at
Verfügbare Informationen zu "fflush(stdin) verhält sich komisch"

  • Qualität des Beitrags: 0 Sterne
  • Beteiligte Poster: detewe89 - exbs - DrPhil_Guth
  • Forum: Tutorials.at
  • Forenbeschreibung: Programmierforum
  • aus dem Unterforum: C / C++
  • Antworten: 5
  • Forum gestartet am: Mittwoch 19.04.2006
  • Sprache: deutsch
  • Link zum Originaltopic: fflush(stdin) verhält sich komisch
  • Letzte Antwort: vor 16 Jahren, 10 Monaten, 12 Tagen, 1 Stunde, 46 Minuten
  • Alle Beiträge und Antworten zu "fflush(stdin) verhält sich komisch"

    Re: fflush(stdin) verhält sich komisch

    detewe89 - 14.06.2007, 19:57

    fflush(stdin) verhält sich komisch
    Hallo,

    ich hab mich gefragt, wie man diese etwas undurchsichtige funktion getchar() umgehen kann und bin so auf fflush(*file) gekommen.

    In der referenz steht, dass, wenn man als file stdin einsetzt, dass unter den meisten betriebssystemen stdin geleert wird. Unter windows hat dies auch funktioniert, aber komischerweise nicht unter linux (wo anscheinend gar nichts passiert ist). meine fragen:

    1. was macht fflush(stdin) unter linux?

    2. welche funktion leert stdin ganz sicher und ist auch dafür gedacht???


    danke,
    Daniel



    Re: fflush(stdin) verhält sich komisch

    exbs - 14.06.2007, 22:25


    Code: fflush(stdin); macht auch unter Umständen auf Windows nicht das, was es soll. (Ich habe hier mal ein Text darüber gepostet, suche einfach ein bisschen, wenn es dich technisch versierter interessiert ;) )

    Was das Ganze unter Linux macht, kann ich dir nicht sagen, weil ich Linux nicht habe.

    Als Ersatz kannst du folgenden Code verwenden: Code:
    setvbuf(stdin,NULL,_IONBF,0);
    setvbuf(stdin,NULL,_IOFBF,BUFSIZ); Allerdings weiß ich nicht, ob das auch unter Linux geht, weil ich denke, dass "setvbuf" ein Win-Api Funktion ist. Aber probiere es doch einfach.



    Re: fflush(stdin) verhält sich komisch

    DrPhil_Guth - 15.06.2007, 10:27


    fflush(stdin) verhält sich deswegen etwa komisch, weil die Funktion für etwas ganz anderes gedacht ist. Das verhalten für stdin ist (wie in jeder guten referenz stehen müsste) _undefiniert_ . Das bedeutet so viel wie "nicht einsetzen, und wenn doch dann sieh zu was du daraus machst".

    Am beten machst du das so wie exbs es gesagt hat. Sonst hast du hier noch ein paar anregungen: http://c-plusplus.de/forum/viewtopic-var-t-is-111042.html

    @ exbs: setvbuf() ist in der C- Laufzeitbibliothek vorhanden.



    Re: fflush(stdin) verhält sich komisch

    DrPhil_Guth - 15.06.2007, 10:37


    Hm... Ich hab noch ne frage...

    http://www.cplusplus.com/reference/clibrary/cstdio/setvbuf.html hat folgendes geschrieben:
    int setvbuf ( FILE * stream, char * buffer, int mode, size_t size );

    size
    Buffer size in bytes.
    If the buffer argument is NULL, this determines the minimum size automatically allocated by the function for the buffer, otherwise it must be a value equal or lower to the size in bytes of the array specified as buffer.


    Soll heißen, wenn buffer auf NULL ist, dann setzt die Funktion die Puffergröße zwar _mindestens_ auf size, allerdings (soweit ich das verstanden habe) kann es auch mehr sein. Das würde bedeuten dass die Puffergröße nicht Null wäre, was den ganzen effekt irgendwie... Unwirksam machen würde. Oder liege ich da falsch...

    [edit]
    Ich glaub ich mach mal in der FAQ ne zusammenschau von den Methoden wie man den Puffer löschen kann.
    [/edit]

    [edit2]
    Aaaahhh, jetzt hab ich verstanden was los ist. Es geht um _IONBF und _IOFBF, dabei wird der Puffer ein und ausgeschalten, und nicht um die größe. Sorry, hab ich nicht gleich gesehen/gecheckt :oops:
    [/edit2]

    [edit3]
    So, FAQ Frage ist fertig: http://www.iphpbb.com/board/viewtopic.php?nxu=53411326nx34195&p=2756#2756
    [/edit3]



    Re: fflush(stdin) verhält sich komisch

    exbs - 15.06.2007, 14:31


    Das ist so ein Trick, denk ich mal gelesen zu haben. Dabei bemächtigt man sich der Tatsache, dass, wenn man den Puffer ausstellt und ihn dann wieder aktiviert, er leer ist.



    Mit folgendem Code, können Sie den Beitrag ganz bequem auf ihrer Homepage verlinken



    Weitere Beiträge aus dem Forum Tutorials.at

    Turbo C - gepostet von Mei$ter A^ am Montag 24.04.2006
    Zeichen - gepostet von schlodel am Freitag 13.04.2007
    qIp, ICQ, MSN, Trilian und andere... - gepostet von Dirty Oerty am Samstag 17.11.2007
    Grafik und Maus??? - gepostet von Martix391 am Sonntag 04.06.2006
    MP3 TAGS ? - gepostet von exbs am Donnerstag 04.01.2007
    ?Hello World wird nicht angezeigt? - gepostet von Bratwurst am Samstag 11.08.2007
    splittext - gepostet von DrPhil_Guth am Donnerstag 15.03.2007
    Programm (C) was Sekunden in Tage Stunden Minuten umrechnet! - gepostet von Kimi am Donnerstag 01.11.2007



    Ähnliche Beiträge wie "fflush(stdin) verhält sich komisch"

    Luna verhält sich merkwürdig - martina (Samstag 15.07.2006)
    Lucky verhält sich komisch.. - martina (Samstag 15.07.2006)
    männchen verhält sich anders! - gwen (Dienstag 10.10.2006)