Googlehupf
Erfahrenes Mitglied
Hallo,
wir lernen gerade Verkettete Listen und ich bin mir nicht ganz im Klaren wie das genau funktioniert.
Im Grunde kann das Programm: Spielzüge von Ticatactoe auslesen aus einem Binärfile(x-position, y-position und zeichen).
In den comments steht alles.
h-file:
1. c-file
2.c-file(main):
Ja ich weiß sehr viele Frage, unter anderem auch sicher grundlegende, aber ich verstehe das irgendwie nicht.
Wäre auch aufejdenfall sehr dankbar, wenn ihr mir das erklären könntet.
Danke im voraus!
Gruß
Googlehupf
wir lernen gerade Verkettete Listen und ich bin mir nicht ganz im Klaren wie das genau funktioniert.
Im Grunde kann das Programm: Spielzüge von Ticatactoe auslesen aus einem Binärfile(x-position, y-position und zeichen).
In den comments steht alles.
h-file:
C++:
struct spielzug_struct
{
int posx;
int posy;
char zeichen;
struct spielzug_struct * next;//dieser pointer zeigt auf das nächste element
struct spielzug_struct * prev;//dieser pointer zeigr auf das vorherige element
/*aber wie funktioniert das hier genau zeigt der pointer jetzt nur auf einen Wert oder auf den ganzen Block/Struktur? Wo sieht man jetzt das der prev-pointer auf den vorheriegen zeigt und next auf den nächsten? Irgendwie hab ich voll das Blackout grad^^*/
};
typedef struct spielzug_struct spielzug;
struct spielzugfile_struct
{
int posx;
int posy;
char zeichen;
};
typedef struct spielzugfile_struct spielzugfile;
void zuege2file(char filename[], spielzug zug);
spielzug * file2zuege(char filename[]);
1. c-file
C++:
#include "spielzuege.h"
#include <stdio.h>
#include <stdlib.h>
void zuege2file(char filename[], spielzug zug)
{
FILE* infile = NULL;
infile = fopen(filename,"a+b");
if(infile == NULL)
{
printf("FILE %s counld not be opened!",filename);
exit(-1);
}
else
{
fwrite(&zug,sizeof(spielzug),1,infile);
}
fclose(infile);
return;
}
spielzug * file2zuege(char filename[])
{
FILE* infile = NULL;
spielzug* liste = NULL;
spielzug* act_spielzug = NULL;
spielzug* letzer_spielzug = NULL;
spielzugfile buffer;
if ( ( infile = fopen(filename,"rb")) != NULL)
{
while(fread(&buffer,sizeof(spielzugfile),1,infile) == 1)
{
act_spielzug = (spielzug* )malloc(sizeof(spielzug));//warum braucht man hier ein malloc, das es öfter als einmal aufgerufen wird durch die while ja?
if (act_spielzug == NULL)
{
exit(-1);
}
act_spielzug->posx=buffer.posx;//ja hier werden einfach die werte zugeweisen
act_spielzug->posy=buffer.posy;//dasselbe...
act_spielzug->zeichen=buffer.zeichen;//dasselbe
act_spielzug->next=NULL;//warum lässt man hier den next-pointer auf "Nichts" zeigen?
if (liste == NULL)//wann soll den bitte der pointer liste auf was anderes außér NULL zeigen?
{
liste = act_spielzug;//was bringt das hier?
}
else
{
letzer_spielzug->next= act_spielzug;//Warum macht man das hier, falls liste != NULL ist?
}
letzer_spielzug=act_spielzug;//Und da?
}
fclose(infile);
}
return liste;//warum übergibt man liste? und net actSpielzug oder so?
}
2.c-file(main):
C++:
#include "spielzuege.h"
#include <stdio.h>
#include <stdlib.h>
int main()
{
spielzug * alle_zuege = NULL;
spielzug * zuege_first = NULL;
zuege_first = file2zuege("zuege.dat");
alle_zuege=zuege_first;
while(alle_zuege != NULL)
{
printf("x:%d,y:%d,stein:%c\n",alle_zuege->posx,alle_zuege->posy,alle_zuege->zeichen);
alle_zuege=alle_zuege->next;
}
return 0;
}
Ja ich weiß sehr viele Frage, unter anderem auch sicher grundlegende, aber ich verstehe das irgendwie nicht.
Wäre auch aufejdenfall sehr dankbar, wenn ihr mir das erklären könntet.
Danke im voraus!

Gruß
Googlehupf