Anfängerproblem mit EOF !



  • Hallo an alle !

    Bin kompletter Anfänger in Sachen Programmierung und versuche mir gerade mit dem Buch "Programmieren in C" einen kleinen Einblick zu verschaffen .

    Ich habe folgendes Problem ( oder einfach nur Denkfehler )

    Ich bin gerade dabei das Programm, das Zeichen, Tabulatoren und Leerzeichen mitzählt, zu schreiben . Eigentlich ist das auch kein Problem und ich verstehe
    die Struktur und den Sinn des Codes ganz gut .

    Hier der Teil des Codes der mir Probleme bereitet :

    while ((c=getchar() != EOF)
    {if Anweisungen};

    printf ("Ausgabe der mitgezählten Werte")

    Nun zählt die Schleife die Werte der if Anweisungen und speichert diese in den
    Variablen ab.
    Solange aber getchar ungleich zu EOF ist erhalte ich keine Ausgabe von printf da ja die Schleife wieder durchlaufen wird .
    Wenn ich aber EOF (STRG+C) drücke beendet das Programm und ich erhalte wieder keine Ausgabe von printf .

    Ich würde aber gerne die Ausgabe sehen und danach erst mit return 0; beenden .

    So wie das Programm jetzt geschrieben ist funktioniert es zwar einwandfrei aber ich erhalte eben keine Ausgabe :

    Bitte um Hilfe !

    MFG



  • Welches Betriebssystem nutzt du? Strg-C ist nämlich SIGINT (Default: Programm beenden) und nicht EOF. Strg-D ist EOF.



  • Betriebssystem ist Windows 7 .
    STRG+D funktioniert nicht .
    Mfg



  • Versuche mal unter Windows STRG+Z und dann Enter zu drücken.



  • Versuch mal STRG-Z



  • Hey Danke, es funktioniert !

    In allen bisher besuchten Seiten stand immer STRG-C IST EOF !

    Problem gelöst !

    DANKE DANKE



  • Microsoft muss halt wie immer alles anders machen.


  • Mod

    314159265358979 schrieb:

    Microsoft muss halt wie immer alles anders machen.

    Quark, mal wieder, leider.

    Nirgends ist CTRL+C das Signal für EOF.



  • 314159265358979 schrieb:

    Microsoft muss halt wie immer alles anders machen.

    Schonmal auf die Idee gekommen dass Linux vielleicht doch nicht der absolute Referenzpunkt ist? Verrückter Gedanke, ich weiß... 🙄



  • Naja, anders als irgendjemand musste man es in diesem Fall sowieso machen. Ctrl-Z als end-of-file stammt von DEC und ist über CP/M und QDOS in MS-DOS hineingelangt. Mit Altlasten aus dieser Zeit schlägt sich Windows heute noch herum - besonders komisch ist die Geschichte von aux.c. Dass UNIX PDP und VAX überleben würde, war zu diesem Zeitpunkt keinesfalls absehbar.

    Übrigens ist der Mechanismus auch grundlegend anders: Unter DOS wird Ctrl-Z (also ASCII SUB) direkt als Zeichen in die Standardeingabe des laufenden Prozesses geschoben. Ob der Prozess dann zu lesen aufhört, ist seine Sache. Wenn ein UNIX-Terminal Ctrl-D empfängt, dichtet es (wenn es sich nicht im Raw-Mode befindet) halt stumpf den Eingabestrom (setzt also dessen EOF-Bit).

    Wenn man UNIX gewohnt ist, mag man das merkwürdig von Windows finden, und die ursprünglichen Gründe dafür sind in der Tat heute hinfällig. Gleichwohl: MS-DOS, mithin Windows, hat sich nie als UNIXoides Betriebssystem verstanden; man suchte nicht die Kompatibilität mit UNIX, sondern seinerzeit mit CP/M. Dort waren die Konventionen halt ganz anders, und seither hat man, um die Kompatibilität mit früheren Betriebssystemen des eigenen Hauses zu wahren, sich nie daran gewagt, diese Dinge zu ändern. Sicher lagen CP/M deutlich weniger gründliche technische Überlegungen zugrunde als UNIX, und sicher hat das eine Menge Probleme mit sich gebracht, die Windows bis heute verfolgen, aber um 1980, als das alles entschieden wurde, wäre es eine höchst alberne Idee gewesen, UNIX auf den 8086 zu portieren.


Anmelden zum Antworten