Frage zur Schleife in folgendem Code



  • CStoll schrieb:

    ... genau das macht progingmania's Schleife. ... // +g

    Die hab ich selbst nur geklaut, von c.rackwitz 😃



  • GlobalDeeJay schrieb:

    Ah hehe, jetzt weis ich was ihr mein.
    Allerdings haben wir in der Schule das:

    fflush(stdin);
    

    zum Puffer löschen gelernt.

    Und wenn du jemals ernsthafte Programme schreiben willst, solltest du DAS schnell wieder vergessen. fflush() schickt einen Ausgabepuffer aus dem Programm heraus, das Verhalten mit stdin ist undefiniert (MSVC macht das, was du erwartest, auf anderen Systemen könntest du dir damit die Festplatte schrotten oder den vierten Weltkrieg auslösen).



  • Und wenn du jemals ernsthafte Programme schreiben willst, solltest du DAS schnell wieder vergessen. fflush() schickt einen Ausgabepuffer aus dem Programm heraus, das Verhalten mit stdin ist undefiniert (MSVC macht das, was du erwartest, auf anderen Systemen könntest du dir damit die Festplatte schrotten oder den vierten Weltkrieg auslösen).

    Im Ernst? Sollt ich vllt mal meinem Lehrer sagen? ^^
    Meine "Mathelehrer" der auch Programmieren unterrichtet will dür sowas immer beweise.. Habt ihr einen? *gg*



  • *musslehrertötengehen*



  • GlobalDeeJay schrieb:

    Meine "Mathelehrer" der auch Programmieren unterrichtet will dür sowas immer beweise.. Habt ihr einen? *gg*

    Ja, den ANSI-Standard (hab ich leider nicht vorrätig). Und daß fflush(stdin); Unsinn ist, muß man nicht beweisen - das ist so festgelegt (genauso wie die Tatsache, daß main() einen int zurückgeben muß).



  • Na gut, dann schreib ich dem mal ne Mail dass der uns voll den Dreck beibringt oder wie?
    Aber anscheinend funktioniert es ja bei "uns", dass der Puffer dann iwie leer is.
    Und wie meinst des mit anderen Pattformen? Wenn mans durch nen anderen Compiler schmeißt?
    Aber gut, danke für den Hinweis 😉



  • GlobalDeeJay schrieb:

    Und wie meinst des mit anderen Pattformen? Wenn mans durch nen anderen Compiler schmeißt?

    Genau das meinte ich (und in der Praxis solltest du dich möglichst wenig auf "Features" verlassen, die auf undefiniertem Verhalten der Sprache aufbauen - irgendwann willst du sicher, daß jemand anderes mit deinen Programmen arbeiten kann).



  • Microsoft und fflush:
    http://msdn2.microsoft.com/en-us/library/9yky46tz(VS.80).aspx

    Weiter unter im Beispiel steht dann bei der Verwendung von fflush(stdin);

    Microsoft schrieb:

    ...  
       // You must flush the input buffer before using gets. 
       // fflush on input stream is an extension to the C standard 
       fflush( stdin );   
    ...
    


  • Wie ich sagte, unter MS funktioniert's - im realen Leben würde ich es nicht anwenden wollen 😉
    (ja, ich arbeite hauptamtlich mit dem MSVC, aber trotzdem ;))



  • Genau das wollte ich damit ausdrücken...

    Wenn es nicht standardkonform ist, lieber was standardkonformes nehmen... 😉


Anmelden zum Antworten