Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » C filepointer rekursiv

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
08.12.2007, 17:54 Uhr
~fabske
Gast


Ich habe ein Problem mit einer Übungsaufgabe. Ich soll einen Baum in eine Datei speichern, aber das Problem ist der filepointer, denn das auslesen des Baumes geht ja nur rekursiv. Es funktioniert alles, die Datei wird angelegt, aber sie ist immer lehr

So sieht ein Knoten aus:

Code:
struct Knoten
{
  char name[20];
  struct Knoten* links;
  struct Knoten* rechts;
};


Das hier ist die Funktion:

Code:
int  speicherBaum(struct Knoten* Baum, char* Dateiname)
{
  FILE *fp;
  fp = fopen(Dateiname,"w");
  schreibBaum(Baum, &fp);
  fclose(fp);

  return 0;
}


int schreibBaum(struct Knoten* Baum, FILE* fp)
{
  fprintf(fp,"%s\n", (*Baum).name);
  //printf(" %s\n", (*Baum).name);
  if((*Baum).links!=NULL) schreibBaum((*Baum).links, fp);
  if((*Baum).rechts!=NULL) schreibBaum((*Baum).rechts, fp);

  return 0;
}
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
08.12.2007, 18:20 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi,

wenn du weißt das die datei vorher leer/nicht existent ist, oder dies als voraussetzung gelten kann, kannst du "a" statt "w" verwenden
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
08.12.2007, 18:22 Uhr
0xdeadbeef
Gott
(Operator)


Du musst schreibeBaum fp übergeben, nicht &fp. Sonst kriegt schreibeBaum nen FILE**, castet den nach FILE* um und produziert dann nur Blödsinn.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
09.12.2007, 12:33 Uhr
xXx
Devil


Willst du wirklich C?

C++:
struct Node
{
    char name[20];
    struct Node* left;
    struct Node* right;
};

bool save_tree(struct Node* tree, const char* file_name)
{
    FILE *fp = fopen(file_name, "w");
    if (!fp) return false;

    bool result = save_node(tree, &fp);
    fclose(fp);
    return result;
}


bool save_node(struct Node* node, FILE** fp)
{
    if (!fp) return false;

    fprintf(*fp, "%s\n", node->name);
    if (node->left != NULL) save_node(node->left, *fp);
    if (node->rechts != NULL) save_node(node->right, *fp);
    return true;
}

Dieser Post wurde am 09.12.2007 um 12:39 Uhr von xXx editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


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: