[C] EOF funzt nur beim ersten Start

Raico

Lt. Junior Grade
Registriert
Okt. 2005
Beiträge
274
also habe ne while schleife die so ausschaut

while(EOF!=scanf("%d", &zahl)){

so hier stehen halt jetzt einige bfehle und so. Der liest halt sau viele Zahlen ein bis man halt STRG+C drückt und gibt dann was mit den zaheln aus. Bevorihr euch jetzt auf das prog an sich konzentriert, es funzt. also das Problem ist lediglich das der lediglich beim ersten Start des programms nach Windows neustart das mit EOF macht und etwas ausgibt, wenn ich das Prog nochmal starte dann bricht der bei STRG+C immer das ganze prog ab und gibt halt die rpintf sachen nich mehr aus, irgendwie komisch aber wieso? Hat das was mit Windows zu tun?
 
Afik: Der Text wird nicht bei jedem ausgegebenen Zeichen auf die Konsole geschrieben, sondern erst wenn ein bestimmter Befehl aufgerufen wird.
Dieser wird z.B. indirekt aufgerufen wenn du ein ENDL ausgibst.
 
Ctrl+C ist ja auch Programmabruch. EOF müsste Ctrl+Z sein.

Wobei ich die Eingabe einer Ctrl Sequenz nicht als wirklich gute Bedienung empfinde.

Ein einfaches Enter, d.h. eine Leereingabe wäre einfacher und würde nicht zwei Tasten benötigen.
Dazu müsste man halt die Eingaberoutine etwas aufwendiger gestalten.

MfG

Arnd
 
Ja nur leider ist das EOF teil der aufgaben stellung. Und ich find es halt nur sau komisch das wenn ich Windows neustarte und dann das prog direkt funzt es aber wenn ich danach das prog nochmal starte geht es nicht mehr. Ich werde es gleich mal mit STRG Z versuchen.

Edit: also STRG Z ist s nich, da passiert garnix. Es muss also mit STRG C funzen, Sch.. windows ;-)
 
Sorry aber das liegt nicht an Windows, sondern an Deiner Implementierung. Ctrl+C ist nicht EOF sondern Programmabbruch.
Es kann aber natürlich auch sein das das scanf einen Bug hat. Dann ist aber die C Lib buggy.

Bau eine While Schleife in der nur ein Zeichen abgefragt wird. Dieses kannst Du dann explizit abfragen ob EOF gekommen ist. Die Zeichen setzt Du so wie so kommen in ein Char Array und holst dir die Zahl dann wieder mit sscanf oder atoi oder strtod.

Alternativ kannst Du ja noch gets ausprobieren.

Ctrl+C würde ich abfangen und fragen ob der Anwender das Programm wirklich beenden will.

MfG

Arnd
 
Zuletzt bearbeitet:
Zurück
Oben