Warum übersprint er meine zweite Eingabe?



  • @Wutz: ich schrieb aber von scanf bzgl. double...



  • Gerade bei ANSI C crasht es bei mir 😮

    Folgendes Beispiel:
    ICh habe mal ein Programm geschrieben, dass dein Alter anhand deines Geburtsdatums errechnen kann. Bei der Eingaben des Geburtsdatums sag es so aus:

    do{
    	printf("	  Wann bist du geboren? Gib bitte zuerst das Jahr an: ");
    	scanf("%d",&y);
    	fflush(stdin);	
    }while(y>2015||y<0);
    do{
    	printf("			    Jetzt den Monat: ");
    	scanf("%d",&m);
    	fflush(stdin);
    }while(m>12||m<0);
    do{
    	printf("			Zum Schluss bitte den Tag: ");
    	scanf("%d",&d);
    	fflush(stdin);
    }while(d>31||d<0);
    

    Hätte ich das fflush(stdin) nicht gemacht, wäre es nach der ersten Eingabe durchgelaufen und mein Programm gecrasht. 😕



  • Verschone uns bitte mit deinen falschen und inkonformen Codebeispielen.
    ANSI C und solche Codes in einem Beitrag zu verwenden sind einfach nur Schrott.
    Sie tragen nichts zur Lösung des Themas bei und sind sogar schädlich, da Leser deinen unsinnigen Code wiederverwenden könnten.



  • Uhhh da ist aber jemand wieder freundich ❤

    Tut mir außerordentlich dass ich vllt helfen konnte. Sry. 😞



  • TocToc schrieb:

    Gerade bei ANSI C crasht es bei mir 😮

    Folgendes Beispiel:
    ICh habe mal ein Programm geschrieben, dass dein Alter anhand deines Geburtsdatums errechnen kann. Bei der Eingaben des Geburtsdatums sag es so aus:

    Hätte ich das fflush(stdin) nicht gemacht, wäre es nach der ersten Eingabe durchgelaufen und mein Programm gecrasht. 😕

    Das erinnert mich eher an, wozu einen Schraubenzieher nutzen, wenn ich die Schraube mit dem Hammer auch dort reinkriege?.

    fflush(stdin) ist undefiniert, dass es bei dir per Zufall funktioniert bzw. nur weil Windows dieses undefinierte Verhalten dumm nutzt, heißt nicht, dass der Code korrekt ist. Dein Code bleibt nach wie vor falsch. Nimm denselben Code und kompiliere es für alle andere nicht Windows Plattformen und dein Code wird scheitern.

    Um ein definiertes Verhalten überall zu bekommen: fgets nutzen und dann parsen.

    // edit: das hat nicht mit Freundlichkeit oder Unfreundlichkeit zu tun, das hat nichts mit dir zu tun, sondern mit der Tatsache, dass wir in ANSI C Forum so oft mit dieser flush(stdin) Scheiße zu tun haben, egal wie man darauf hinweist, jeden Tag kommt einer mit flush(stdin)



  • Ich sag ja nur dass das eine der korrekten Lösungen für mein Problem war.
    Wäre es nicht korrekt hätte es nicht funktioniert 😃 😃



  • TocToc schrieb:

    Wäre es nicht korrekt hätte es nicht funktioniert 😃 😃

    das ist falsch. Du kannst mit einem Stein deine Haustür offnen. Das Tür-Aufmachen Mechanismus funktioniert, aber einen Stein dafür nutzen ist und bleibt eine nicht korrekte Anwendung und wenn du im Heimwerker Forum jemanden dazu räst, einen Stein anstatt den Schlüssel zu nehmen, wirst du auch eine unfreundliche Antwort bekommen.

    //edit: der Grund warum sich hier Wutz zurecht aufregt, ist dass du eine falsche Tatsache verbreitest und als korrekte Lösung presentierst, auch wenn man dir mit Tatsachen konfrontiert bleibst du dabei deine falsche Lösung anzupreisen



  • Ich hab den Command ja nicht erfunden oder?
    Der hat schon seinen Zweck, den habe ich mir nicht erdacht sondern im weiten Kindernetz gefunden und hey er funktioniert. Vllt nicht so elegant weil die Tür danach kaputt ist, aber es funktioniert. Und mein Programm geht nicht kaputt wie die Tür. 😉



  • Wie alt bist du? 12? 13?
    "Gerade bei ANSI C..." gefolgt von fflush(stdin) ist schlimmes Pfuscher-JW Niveau; du redest über Sachen, von denen du keine Ahnung hast.
    Nochmal: deine "Hilfe" ist hier unerwünscht, ob sie gut gemeint war oder nicht, ist dabei irrelevant. Schreib solche Sachen doch auf deiner Facebookseite, da stören sie wenigstens niemanden.
    Es gibt hier genug kompetente Antworter, das Forum auf Pfuscher-JW Niveau runterzuziehen durch Beiträge deiner Qualität, grenzt schon an Sabotage.



  • TocToc schrieb:

    Ich hab den Command ja nicht erfunden oder?
    Der hat schon seinen Zweck, den habe ich mir nicht erdacht sondern im weiten Kindernetz gefunden und hey er funktioniert. Vllt nicht so elegant weil die Tür danach kaputt ist, aber es funktioniert. Und mein Programm geht nicht kaputt wie die Tür. 😉

    du meine Güte, und dann wunderst du dich, warum du "unfreundliche" Antworten bekommst. Eigentlich bekommst du viel zu freundlichen Anwtorten für den Unsinn, denn du hier verzapfst 😮 👎



  • Ja liebes Wutz ich habe verstanden, dass der liebe JW kein guter Mann ist. Und ja du hast dir wahrscheinlich gemerkt, dass ich damit meine Grundlagen gelernt habe. Ändert trotzdem nix daran, dass dieser nette lieber Command mein Programm funktionierend gemacht hat. Tut mir Leid.

    Und wenn selbst wenn ich 12 oder 13 wäre ist es mein gutes Recht Antworten zu geben. "Sabotage" hin oder her.
    PS: Gönn dir ne Auszeit und such mich auf Facebook, du wirst nichts finden 🙂



  • TocToc schrieb:

    Ja liebes Wutz ich habe verstanden, dass der liebe JW kein guter Mann ist. Und ja du hast dir wahrscheinlich gemerkt, dass ich damit meine Grundlagen gelernt habe. Ändert trotzdem nix daran, dass dieser nette lieber Command mein Programm funktionierend gemacht hat. Tut mir Leid.

    ist doch scheiß egal, ob es bei dir zufällig funktioniert. Falsch bleibt falsch, und wenn du das nicht verstehen kannst/willst, dann wundere dich nicht, wenn du wie ein Idiot behandelt wirst.

    TocToc schrieb:

    Und wenn selbst wenn ich 12 oder 13 wäre ist es mein gutes Recht Antworten zu geben. "Sabotage" hin oder her.

    und genau unser gutes Recht auf Schwachsinn zu reagieren und versuchen, die Qualität der Beiträge hier hoch zu halten.



  • Ob es zufällig funktioniert
    HAHAHAHAHA genau das 😃 😃 😃 😃 😃



  • TocToc schrieb:

    Ob es zufällig funktioniert
    HAHAHAHAHA genau das 😃 😃 😃 😃 😃

    was zum Teufel willst denn hier? Geh irgendwo anders rumtrollen, aber verschwendet unsere Zeit hier nicht.

    @mods: könnte einer der Mods diesen Thread schließen, bitte? TocToc will offensichtlich nur rumtrollen



  • Können wir gerne schließen und btw hat das nix mit trolling zu tun.

    Aber damit zu argumentieren, dass die pure Logik eines Computers Zufälle hervorruft...Respekt.



  • TocToc schrieb:

    Aber damit zu argumentieren, dass die pure Logik eines Computers Zufälle hervorruft...Respekt.

    Entweder verstehst du nicht, was hier mit Zufall gemeint ist, oder du trollst. Bei dem Satz würde ich eher von letzterem Ausgehen.
    Dir muss doch klar sein, dass "Zufall" sich hier nicht auf ein ganz konkretes Programm bezieht, dass sich in einer wohldefinierten Umgebung immer gleich verhalten wird, sondern auf den Allgemeinfall. Und was den Allgemeinfall angeht, ist nicht gesagt, dass deine Lösung funktioniert. Es kann durchaus sein, dass das was du ausprobiert hast, unter Windows immer funktioniert. Aber es gibt nicht nur Windows. Und es gibt nicht nur den Microsoft Compiler. Und es ist nicht mal definiert, ob das mit jedem Microsoft Compiler und jeder CRT funktionieren wird, oder Microsoft das Verhalten irgendwann ändert. Das dürfen die ohne weiteres machen, weil das eh nie im Standard definiert war. Deswegen ist es purer Zufall, obs funktioniert. Du schreibst ein Programm und es funktioniert, jahrelang. Das wird irgendwann mal richtig groß, dutzende Entwickler arbeiten dran. Und dann stellt ihr auf eine neure Compilerversion um und plötzlich geht nichts mehr und man muss monatelang (keine Übertreibung, alles schon gesehen) nach irgendwelche versteckten Bugs suchen, weil man nicht standardkonform programmiert hat. Deswegen sind solche Vorschläge einfach gefährlich.



  • Des is schon wesentlich präziser 👍

    Mein Compiler:
    Dev-Cpp Compiler. Programmiert Standard, btw.


Anmelden zum Antworten