fgets macht nicht weiter
-
Hallo leute,
hier mein Code...#include <stdio.h> #include <stdlib.h> #include <string.h> #define SIZE 80 struct element { int nr; char *zk; } *elList[SIZE], *p; int i, j, k, counter, cLines, again = 1, found = -1; char line[SIZE], seek[SIZE], get; void fl(){ while(getchar() != '\n'){} } int main(){ while (fgets(line, SIZE, stdin) != NULL && cLines++ < SIZE) { //speicher fuer struct elList[counter] = malloc(sizeof(struct element)); //speicher fuer zk elList[counter]->zk = malloc(sizeof(line)); elList[counter]->nr = cLines; strcpy(elList[counter]->zk, line); /*printf("nr: %d; zk: %s\n", elList[counter]->nr, elList[counter]->zk);*/ counter++; } printf("\nsortiere...\n\n"); for(i=0;i<counter-1;i++){ for (j=0;j<counter-1; j++) { if(strcmp(elList[j]->zk, elList[j+1]->zk) > 0){ p = elList[j]; elList[j] = elList[j+1]; elList[j+1] = p; } } } printf("Sag was:\n"); fgets(seek, SIZE, stdin); printf("Du sagtest \'%s\'", seek);
Es soll eine Textdatei eingelesen werden und alle zeilen werden in einer dynamischen liste gespeichert.
Mein problem ist nun, dass die letzten 3 zeilemn fehlerhaft funktionieren, soll heißen, dass ich eingeben kann was ich will und solange enter drücken kann wie ich will, aber es geht nicht weiter : (
wenn ich in einem extra-programm folgendes mache:
int main(){ printf("Sag was:\n"); fgets(seek, SIZE, stdin); printf("Du sagtest: \'%s\'", seek); return 0; }
Funktioniert es reibungslos...
mfg
ani
-
Naja, logisch. Wenn du stdin in eine Datei umleitest, reagiert das Programm nicht mehr auf Tastatureingaben.
Ich hätte allerdings eigentlich erwartet, dass der letzte fgets-Aufruf mit NULL zurückkommt und sich das Programm gleich beendet, weil stdins eof-Bit gesetzt ist.
-
ich dachte nachdem ich den stdin stream mit den daten der datei "geleert" habe, kann ich den wieder benutzen, mit daten über die tastatur dann eben...
: (
wie kann ich denn die eingaben der tastatur wieder weiterverarbeiten?
lg
ani
-
Systemunabhängig wird das nicht gehen. Unter Linux könnte
freopen("/dev/tty", "r", stdin);
funktionieren (ohne das jetzt getestet zu haben). Möglich, dass unter Windows entsprechend
freopen("CON", "r", stdin);
geht. Besser wäre es allerdings, die Datei getrennt von stdin zu öffnen, weil niemand ein solches Verhalten von einem Programm erwartet; den Kram in Skripten zu benutzen, wird dadurch praktisch unmöglich. Schlag fopen und fclose nach; fgets kennst du ja schon.
Übrigens, nur so am Rande: Dir ist klar, dass du den Speicher, den du mit malloc anforderst, auch wieder freigeben musst, oder?
-
also besser die datei extra öffnen und lesen, anstatt sie über die fileumlenkung einzulesen... ich versuchs, danke
ja ich geb die liste am ende wieder frei.
danke
Edit: interessant, dass in unserer aufgabe steht, dass wir über fileumlenkung die datei einlesen sollen und dann einen such-string über die tastatur eingeben sollen ^^
-
Es ist auch möglich den Suchstring als Parameter (argc, argv) bei main mitzugeben.