2010-05-14 8 views
3

J'écris une sous-routine à score élevé pour un jeu basé sur du texte. Voici ce que j'ai jusqu'ici.Débutant C++ - Ouvrir un fichier texte pour le lire s'il n'existe pas, le créer vide

void Game::loadHiScores(string filename) 
{ 
    fstream hiscores(filename.c_str()); // what flags are needed? 
    int score; 
    string name; 
    Score temp; 

    if (hiscores.is_open()) 
    { 
     for (size_t i = 0; i < TOTAL_HISCORES && !(hiscores.eof()); ++i) 
     { 
      cin >> score >> name; 
      temp.addPoints(score); 
      temp.scoreSetName(name); 
      hiScores.push_back(temp); 
     } 
    } 
    else 
    { 
     //what should go here? 
    } 

    hiscores.close(); 

} 

Comment puis-je faire en sorte que:

Si le fichier existe, il est ouvert à la lecture

ELSE le fichier est créé

Merci pour votre temps

Répondre

5

Mauvaise logique je dirais. Je pense que vous voulez:

Try to open an ifstream (not an fstream) containing scores 
if it opened 
    read high scores into array 
    close stream 
else 
    set array to zero 
endif 

Play Game - adjust high scores in array, then on exit 

Try to open scores ofstream (not an fstream) for writing 
if it opened 
    write high scores 
    close stream 
else 
    report an error 
end if 

Si vous utilisez ifstreams et ofstreams, il n'y a pas besoin de drapeaux spéciaux, ou pour éventuellement avoir à rechercher dans le fichier - vous réécrivez juste la chose.

+0

Merci beaucoup. –