Aufgabe 2 - einlesen von zeilen

wie sage ich schluss?

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Aufgabe 2 - einlesen von zeilen
Hallo Leute also ich hab da mal eine Frage.

Wie sage ich demProgramm eigentlich, das es aufhören soll die eingaben zu lesen um dann mit dem sortieren weiterzumachen.

Oder anders ausgedrückt, was ist meine abbruchbedingung? :wand:


wenn ein eof-zeichen kommt, das du mit ctrl+d simulieren kannst.
der fgets-aufruf wird dann NULL, das steht aber alles auch auf den schoenen folien von herrn kleinoeder…


Danke-

:finger: Muss mir die Folien woll doch noch mal genauer anschauen.


Und wie ist der EOF Befehl unter Windows?


ich glaub strtg-c … aber probier einfach mal alles durch :smiley:


nee, ^C beendet das prog, wie unter linux. nimm mal ^Z, das hilft.


So noch mal zur Frage.
Wie kann ich das den realisieren, bzw. wie lass ich in den danach fragen, dass bei fgets NULL heraus gekommen ist?


ähm, naja, wie du es grad formuliert hast:

if (!fgets(…)) …


So überlegt ist das logisch


Bei fgets sollte man nicht einfach if(!fgets …) schreiben. Denn das “null” kann dort zum einen ein EOF sein oder aber auch ein Fehler, was man abfragen sollte. Bei der Aufgabe vielleicht nicht so interessant, aber ein auf Eingaben wartendes fgets könnte z.B. durch ein Signal unterbrochen werden und somit “null” liefern ohne dass ein EOF auftrat (solch lustige Fehlerfälle kommen später noch bei den entsprechenden Übungen g)

Grüße,
Sebbi


hauptsache es terminiert
:smiley:


@sebbi: wie funktioniert denn das dann mit der errno-abfrage?
also:

if ((fgets (…) != NULL) {…}
if (errno == -1) {perror …}

?

oder wie arbeitet man mit dieser errno-variable? und ich muss errno.h einbinden, oder?


Arrg.

Was ist den jetz schon wieder los, immer wenn ich das dritte Wort eingebe kommt die Fehlermeldung “Segmentation fault”


das ende kann man einfach dadurch abfragen:

char c = getc(stdin)
while (c != EOF) {
c = getc(stdin);

}

@Lucius:
zu den segfaults: da hast du wahrscheinlich vergessen immer schön deinen Speicher für die eingegebenen Wörter mit malloc zu reservieren bzw. mit realloc nachzufordern!


@Lucius: Falls es dir was hilft: Ich hatte ein ähnliches Problem, und es lag daran dass ich malloc(strlen(String)) verwendet habe. Sieht zwar gut aus, aber leider braucht ein String genau 1 Byte MEHR als strlen… wegen der terminierenden Null. Versuch einfach mal ein bisschen mehr Speicher anzufordern als du tatsächlich denkst zu brauchen.
Ich denke, wir werden in den SP Übungen noch viel Spass mit malloc-Fehlern und Segmentation Faults haben…


Arg :#:
Hat man ein Problem gelöst kommt das nächste.
:wand:
Jetzt liest er mir nur noch jedes zweite zeichen bzw. wort ein?


also falls es dir hilft, bei mir hat er das letzte wort doppelt eingelesen… hab ich gelöst indem ich den zeiger in dem ich die eingabe zwischengespeichert hab nach jedem durchlauf immer wieder auf NULL gesetzt hab.


Tja das wrde ich gerne machen aber sobald ich ihn auf null setze tritt bei mir unerklärlicherweise ein “segmentation Fault” auf.


Ohne Code koennen wir dir nicht helfen