Falsche Eingaben anfangen



  • supertux schrieb:

    ... wenn sie ein undefiniertes Verhalten beibringen.

    Undefiniert ? Wieso ?



  • Weil es im Standard so festgelegt ist - fflush() leert den Ausgabepuffer eines FILE's, was er bei reinen Eingabedateien machen soll, ist nicht festgelegt (stdin hat keinen Ausgabepuffer, den du leeren könntest ;)).



  • CStoll schrieb:

    fflush() leert den Ausgabepuffer eines FILE's...

    flush bedeutet nicht einfach nur leeren.
    'flush' bedeutet, dass alle gepufferten daten sofort an die 'datensenke' geschickt werden sollen.
    im fall von stdin würde es bewirken, dass alle funktionen deines programms, die daten von stdin erhalten sollen, diese sofort kriegen. sowas würde den ganzen programmablauf durcheinanderbringen, deshalb geht es nicht.
    🙂



  • vista schrieb:

    CStoll schrieb:

    fflush() leert den Ausgabepuffer eines FILE's...

    flush bedeutet nicht einfach nur leeren.

    OK, da habe ich es wohl zu stark vereinfacht. fflush() überträgt die geschriebenen Daten aus dem Pufferbereich des FILE's zu dessen externer Repräsentation (Festplatte/Monitor/Drucker/...).

    Daß die Anweisung "fflush(stdin);" compiliert wird, liegt daran, daß C keine Unterscheidung zwischen Eingabe- und Ausgabe-Dateien trifft - unter C++ gibt es die Basisklassen istream (Eingabe), ostream (Ausgabe) und iostream (Ein- und Ausgabe) - und nur die letzten beiden verstehen ein flush(). Daß es von führenden "Experten" immer wieder aufgeführt wird, liegt vermutlich an der Verbreitung von MS - deren Compiler haben den Standard soweit erweitert, daß du mit fflush(stdin) den Rest des Tastaturpuffers entsorgen kannst.



  • CStoll schrieb:

    Daß es von führenden "Experten" immer wieder aufgeführt wird, liegt vermutlich an der Verbreitung von MS - deren Compiler haben den Standard soweit erweitert, daß du mit fflush(stdin) den Rest des Tastaturpuffers entsorgen kannst.

    ms ist doch doof. 😞
    es gibt fsetpos, rewind, usw. mit denen das auch geht, oder nicht?



  • CStoll schrieb:

    Daß es von führenden "Experten" immer wieder aufgeführt wird, liegt vermutlich an der Verbreitung von MS

    Mit Sicherheit, denn bei MS gehört fflush(stdin) schon seit Jahren zum Repertoire des Beispielquellcodes der MSDN, z.B. in fflush.c kommt es vor.



  • proggingmania schrieb:

    CStoll schrieb:

    Daß es von führenden "Experten" immer wieder aufgeführt wird, liegt vermutlich an der Verbreitung von MS

    Mit Sicherheit, denn bei MS gehört fflush(stdin) schon seit Jahren zum Repertoire des Beispielquellcodes der MSDN, z.B. in fflush.c kommt es vor.

    Wo steht geschrieben, daß MS oberste Instanz bei der Standardisierung von C ist? Oberstes Gesetz ist und bleibt der ANSI-Standard - und wer dagegen handelt, ist selber schuld.

    @vista: Nunja, wie stdin mit rewind() und ähnlichem umgeht, dürfte auch nicht spezifiziert sein (bin ich mir aber nicht so sicher). Der einzige offizielle Weg, um den Tastaturpuffer zu entleeren ist, alle vorhandenen Zeichen bis einschließlich dem nächsten \n auszulesen.
    (bzw. für C++ Streams: ignore())



  • [quote="CStoll"]Wo steht geschrieben, daß MS oberste Instanz bei der Standardisierung von C ist? Oberstes Gesetz ist und bleibt der ANSI-Standard - und wer dagegen handelt, ist selber schuld.
    [/qoute]
    Das war lediglich eine Untermauerung deiner Aussage bezüglich der Verbreitung von MS.
    Wenn du das verkehrt herum in den Hals bekommst...naja...cest la vie.



  • habe lange nach dem programm für die fh gesucht.
    kann uns das vielleicht mal jemand mit hilfe einer zahl erklären??
    also zum beispiel die zahl 10 in die basis 2.

    das wäre sehr gut,

    danke



  • geh einfach das programm durch. wenn du mit printf() einige variablen ausgibst, kannst du den programmablauf sogar verfolgen!



  • chief86 schrieb:

    habe lange nach dem programm für die fh gesucht.
    kann uns das vielleicht mal jemand mit hilfe einer zahl erklären??
    also zum beispiel die zahl 10 in die basis 2.

    das wäre sehr gut,

    danke

    Wenn Du willst, schicke ich Dir die Präsentation, die wir mit PowerPoint machen sollten (auch für FH). Da ist der Programmablauf und die "Rechnung" erklärt, doch dafür benötige ich Deine Email-Adresse. Wir hatten das Programm noch ein wenig verändert, damit der Quellcode übersichtlicher ist (aussagekräftige Varablen z.B., wie es mir hier empfohlen wurde), aber fflush(stdin) haben wir behalten. Als Note haben wir eine 1,7 bekommen 🙂



  • das wäre natürlich klasse, wenn du das machen könntest.
    wir haben unsere präsentation zwar schon fast fertig, aber vielleicht können wir noch was davon reinbauen!
    email adresse ist folgende: labcoof[at]gmx.de

    danke


Anmelden zum Antworten