000
02.05.2004, 13:26 Uhr
Bart
|
Ich möchte ein Programm machen, welches zeilenweisse aus der Datei dw.dat ausliesst und danach zufällig 10 Zeilen davon in die Datei dwa.tmp schreibt. Ich hab dazu folgenden Code geschrieben:
C++: |
struct words { char Puffer[31]; words *next; };
words *first = NULL; words *words_ptr;
int z = 0; char puffer[30]; FILE *f; f = fopen("dw.dat","r");
while(fgets(puffer,sizeof(puffer),f) != 0) {
if (first == 0) { first = (words *) malloc(sizeof(words)); lstrcpy(first->Puffer,puffer); first->next = NULL; }
else { words_ptr = first; while(words_ptr->next != 0) words_ptr = words_ptr->next; words_ptr->next=(words*) malloc(sizeof(words)); words_ptr = words_ptr->next; lstrcpy(words_ptr->Puffer,puffer); words_ptr->next = NULL; }
z++; }
fclose(f); randomize(); f = fopen("dWa.tmp","w");
for(int x =10; x > 0; --x) { words_ptr = first; int i = random(z);
for(i; i>0; --i) { words_ptr = words_ptr->next; } fputs(words_ptr->Puffer,f);
} fclose(f);
|
Das Problem dabei ist, dass ja auch zweimal die selbe Zeile in die Datei dwa.tmp geschrieben werden kann, dies will ich aber nicht. Nun dachte ich mir, das man nachdem man in die Datei dwa.tmp geschrieben hat, die Struktur welche den String enthaltet löschen kann. Da es sich ja aber um verkettet Listen handelt, kann man ja die entsprechende Struktur nicht einfach löschen, sondern man müsste sie sozusagen der Liste aushenken. Kann jemand den Code so ergänzen? (Ich konte es nicht) Im Voraus besten Dank!! |