Programme mit EOF funktionieren nicht.
-
Hallo,
ich verwende Windows 98, ich habe seit kurzem das Buch C programmieren
von Dennis Richie(ich weiß nicht wie sich der schreibt). Fast alle
Programme enthalten den Befehl EOF, aber keines der Programme mit EOF
Funktioniert. Funktioniert das nur unter UNIX?
Könnte mir bitte jemand weiterhelfen?Vielen Dank!
Grüße,
Tutorialfresser
-
Was soll denn das für ein Befehl sein (und was macht er)? Ich kenne nur die Funktion feof() - die prüft, ob du das Dateiende erreicht hast.
(PS: Zeig doch mal ein Beispielprogramm)
-
Ich kann kein Beispiel geben da ich in einem InternetCafe sitze.
Der Begriff lautet EOF es sind Programme die zum Beispiel Zeichen zählen,
EOF wird dabei sehr oft in Verbindung mit getchar() verwendet.
-
Achso, das meinst du. Das ist kein Befehl, sondern eine vordefinierte Konstante (die von den IO-Funktionen zurückgegeben wird, wenn ein LEsefehler aufgetreten ist). Und damit der Wert erkannt wird, mußt du auch den richtigen Header eingebunden haben (normalerweise ist EOF in der <stdio.h> definiert).
-
Das habe ich, das Programm wird kompiliert und gelinkt und zur Ausführung,
öffnet sich ganz normal das DOS-Fenster aber das Programm zählt nichts
und tut nichts.
-
Sorry, wenn ich da nicht helfen kann - aber ohne zu wissen, WAS dein Programm machen soll, wird das nichts.
(und meine Kristallkugel habe ich inzwischen als Totalverlust abgeschrieben)
-
Gut ich werde zu Hause ein paar Programme abschreiben und morgen hier
rein stellen.
-
Hallo, hier sind zwei Programme:
Die Schleifen werden nie verlasssen und die Ausgabe nach den
Schleifen werden nie ausgeführt.Vielen Dank im voraus für Eure Hilfe!
Programm 1:
// Eingabezeichen zählen Version - 1
#include <stdio.h>
int main()
{
long nc;
nc = 0;printf("%d\n", EOF);
while (getchar() != EOF)
++nc;printf("%ld\n", nc);
return 0;
}
Programm 2:
// Programm zählt Wörter.
#include <stdio.h>
#define IN 1 // in einem Wort
#define OUT 0 // ausserhalb eines Wortes// Zeilen Worte und Zeichen zählen
int main()
{
int c, nl, nw, nc, state;state = OUT;
nl = nw = nc = 0;while ( (c = getchar()) != EOF)
{
++nc;if (c =='\n')
++nl;
if (c == ' ' || c == '\n' || c == '\t')
state = OUT;
else if (state == OUT)
{
state = IN;
++nw;
}
}printf("%d%d%d\n", nl, nw, nc);
return 0;
}
-
getChar() liest deine Konsoleneingabe aus. Wenn du also EOF durch 'a' ersetzt, wird das Programm abgebrochen, wenn du ein a eingibst.
-
Vielen Dank,
das werde ich zu Hause sofort ausprobieren.
Grüße,
Tutorialfresser
-
eof ist ctrl-z
-
eof ist ctrl+d
mit ctrl+z stoppst du einen Prozess (zumindest unter Unix)
-
ctrl+A..Z -> ascii 1..26 dezimal
http://www.cppreference.com/ascii.html
ich kenne auch noch ctrl+c...
-
Hallo,
so ich habe das jetzt ausprobiert, ctrl+z macht nichts anderes als das
Programm zu beenden. Wenn ich EOF durch 'a' ersetze dann funktioniert das
Programm, aber es muss doch auch irgendwie mit EOF funktionieren, sonst
würde es doch nicht in diesem Buch stehen?Grüße,
Tutorialfresser
-
Es funktioniert mit EOF wenn Du
programm < datei.txt
ausführst. Auf der DOS-Konsole kannst Du nunmal kein EOF eingeben, auf UNIX-Terminals ist das wirklich Ctrl-D, da klappt das auch bei Direkteingabe.
-
Vielen Dank, dafür benötigt man also UNIX.
Ich bitte Dich aber mir programm < datei.txt etwas genauer zu
erklären falls es keine Umstände macht.Vielen Dank im voraus!
Tutorialfresser
-
Mit dem Shell-Operator (bzw. bei Windows heisst es wohl Batch) "<" kannst Du eine Datei auf die Standard-Eingabe umleiten. Das Programm verhält sich dann so, als würdest Du den Inhalt von datei.txt eintippen, und empfängt am Ende der Datei eben dieses EOF.
Analog kannst Du die Standardausgabe mit > datei.txt anstatt auf den Bildschirm in eine Datei schreiben lassen. Zu guter Letzt mit 2> datei.txt die Standardfehlerausgabe (stderr).
-
TutorialFresser schrieb:
Ich bitte Dich aber mir programm < datei.txt etwas genauer zu erklären falls es keine Umstände macht.
Damit kannst du in der DOS-Konsole die Eingaben für dein Programm umleiten (anstelle der Tastatur wird stdin seine Daten aus der Datei 'datei.txt' holen).
(Anmerkung: der Befehl kommt nicht in dein Programm - mit diesem Befehl startest du dein Programm aus der Konsole heraus)
-
supertux schrieb:
mit ctrl+z stoppst du einen Prozess (zumindest unter Unix)
ich dachte immer das ist ctrl+c.
btw: ctrl+z kommt aus cp/m zeiten, da wurden alle files mit ctrl+z aufgefüllt damit die länge immer ein vielfaches von 128 ist. wenn man so'n file ausliesst und kommt auf ein ctrl+z bedeutet das: EOF
-
Super, vielen Dank für Eure Antworten.
Grüße,
Tutorialfresser