Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » verkettete Listen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
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!!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
02.05.2004, 13:37 Uhr
Oliver
S2-Pixelgeneral


Vielleicht solltest du dir die std::list Klasse mal anschauen, die macht alles automatsich.
--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
02.05.2004, 19:01 Uhr
AlfameisterT



naja du müsstest dir halt deine Zufallszahlen merken, z.B. so


C++:
int zufallszahlen[10]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};

int getRand(){

    int i=rand()%10;
    
    for(int s=0; s < 10; s++){

        if(i ==     zufallszahlen[s]){
        
            i=rand()%10;
            s=-1;
            continue;
        }
    }      
    return i;
}

int main()
...



und dann in deinem Code einfügen


C++:
...
for(int x =10; x > 0; --x)
{
words_ptr = first;    

i= getRand();
zufallszahlen[x-1] = i;

for(i; i>0; --i)
...



kann man aber noch verschönern
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: