switch hat einmal geklappt warum jetz nich mehr?



  • hi

    ich versuche grade c++ zu lernen und habe dabei folgendes programm geschrieben:

    #include <stdio.h>
    
    int main (void)
    
    {
    
    	int x,auf=0,zu=0,zeilen=0,zeichen=0;
    
    	while((x=getchar())!=EOF)
    	{
    		switch(x)
    		{
    			case'{':auf++;
    						break;
    			case'}':zu++;
    						break;
    			case'\n':zeilen++;
    						break;
    			default:zeichen++;
    						break;
    		}
    	}
    printf("%d {, %d }, %d Zeilen, %d Zeichen\n",auf,zu,zeilen,zeichen);
    
    }
    

    zum test hab ich dann alles mögliche im dosmodus eingeben und dann mit strg und unterbrechen das programm abgebrochen und dann hat er mir alles angezeigt wie es sein sollte.

    dann hab ich statt EOF eine 1 eingeben um zu testen ob er dann aus der while schleife springt wenn man ne eins eingibt hat aber nicht funktioniert also hab ich wieder EOF reingeschrieben wieder compilt aber jetz macht er es nicht mehr.

    wenn ich jetz irgendwas eingebe und dann strg unterbr drücke schreibt er nur ^C

    kann mir das jemand erklären?

    ich hab es auch unter einem ander dateinamen mal abgespeichert und getestet ging ebenflls nicht.

    ich hoffe mir kann jemand helfen 🤡

    mfg david

    ps: ich hab heut schon mal was gepostet (wieso klappt diese for schleife nicht?) der thread ist allerdings weg hat jemand ne ahnung warum?



  • ich glaub getchar kann gar nicht EOF liefern, weil getchar liest doch die stdin aus, und die ist normal die tastatur.
    und was meinste mit einer 1 ?
    der zahl 1 oder zeichen '1' ?



  • einfach 1 ... hätte das funktionieren müssen oder wie hätte das dann aussehen müssen syntaxmässig meine ich.

    mfg david

    ps: ich habe festgestellt das das programm nur einmal funktioniert dann mus man den pc neu starten dann funktioniert es wieder einmal und so weiter woran liegt das?



  • DEvent schrieb:

    ich glaub getchar kann gar nicht EOF liefern, weil getchar liest doch die stdin aus, und die ist normal die tastatur.

    Nicht direkt. Die Tastatureingabe durchläuft eine Menge Filterprozesse, bis sie letztlich in stdin ankommt. Beispielsweise kann eine Eingabe erstmal editiert werden (mit der Rücktaste) und irgendwann komplett abgeschickt werden (mit Enter). Je nach Tastaturtreiber bzw. Betriebssystem gibt es da noch eine Menge mehr Möglichkeiten, unter Unix kann man z.B. mit Ctrl+U die gesamte Eingabe löschen. Ctrl+D bricht die eingegebene Zeile sofort ab, ohne dass Enter eingegeben wird. Passiert das am Anfang der Zeile, wird es als EOF aufgefasst.
    Unter DOS/Windows bewirkt man EOF mit Ctrl+Z.

    I.d.R. kann man den Tastaturtreiber aber auch irgendwie auf systemspezifische Art und Weise in den "Raw"-Modus schalten, in dem die einzelnen Tasten direkt nach stdin geliefert werden.



  • Trantüte schrieb:

    einfach 1 ... hätte das funktionieren müssen oder wie hätte das dann aussehen müssen syntaxmässig meine ich.

    '1'



  • @ basar also müßte das progi mit ctrl und z immer funktionieren richtig?

    woran liegt das mit dem neustart was ich oben beschrieben hab?

    mfg david



  • Keine Ahnung. Das ^C macht irgendwas kaputt, was es nicht sollte, nehm ich an, aber ich kann nicht erklären wieso. Eigentlich sollte das nicht passieren. Selbst wenn, sollte der Effekt verschwinden, wenn du die Dos-Box schließt. Nicht erst, wenn du den Rechner neustartest.



  • @bashar ja ich habs mehrfach versucht die dos box zu schliessen etc. aber es klappt erst wieder nach dem neustart und dann auch wieder nur einmal.

    übrigens ist es bei mir ctrl C und nicht ctrl Z (windows xp hab ich falls das was damit zu tun hat 😕 )

    und dieser ^C schreibt er woll dann durch die tastenkombi ctrl C bei ctrl und einem anderen buchstaben schreibt er dann entsprechend ^und den entsprechenden buchstaben.

    übrigens das mit '1' funktioniert wie gewünscht thx

    mfg david


Anmelden zum Antworten