2010-03-11 6 views
0

Ceci est la dernière partie du programme sur lequel je travaille. Je veux sortir une liste tabulaire de chansons à cout. Et puis je veux sortir une liste spécialement formatée d'informations sur les chansons dans fout (qui sera utilisée comme fichier d'entrée plus tard).C++ - Caractères indésirables imprimés dans le fichier de sortie

L'impression sur cout fonctionne très bien. Le problème est que des tonnes de caractères supplémentaires sont ajoutés lors de l'impression à fout.

Des idées?

Voici le code:

void Playlist::printFile(ofstream &fout, LinkedList<Playlist> &allPlaylists, LinkedList<Songs*> &library) 
{ 
fout.open("music.txt"); 
if(fout.fail()) 
{ 
    cout << "Output file failed. Information was not saved." << endl << endl; 
} 
else 
{ 
    if(library.size() > 0) 
    fout << "LIBRARY" << endl; 
    for(int i = 0; i < library.size(); i++)   // For Loop - "Incremrenting i"-Loop to go through library and print song information. 
    { 
    fout << library.at(i)->getSongName() << endl;  // Prints song name. 
    fout << library.at(i)->getArtistName() << endl;  // Prints artist name. 
    fout << library.at(i)->getAlbumName() << endl;  // Prints album name. 
    fout << library.at(i)->getPlayTime() << " " << library.at(i)->getYear() << " "; 
    fout << library.at(i)->getStarRating() << " " << library.at(i)->getSongGenre() << endl; 
    } 
    if(allPlaylists.size() <= 0) 
    fout << endl; 
    else if(allPlaylists.size() > 0) 
    { 
    int j; 
    for(j = 0; j < allPlaylists.size(); j++)   // Loops through all playlists. 
    { 
    fout << "xxxxx" << endl; 
    fout << allPlaylists.at(j).getPlaylistName() << endl; 
    for(int i = 0; i < allPlaylists.at(j).listSongs.size(); i++)   
    { 
    fout << allPlaylists.at(j).listSongs.at(i)->getSongName(); 
    fout << endl; 
    fout << allPlaylists.at(j).listSongs.at(i)->getArtistName(); 
    fout << endl; 
    } 
    } 
    fout << endl; 
    } 
} 
} 

Voici un exemple de sortie à music.txt (fsort):

LIBRARY 
sadljkhfds 
dfgkjh 
dfkgh 
3 3333 3 Rap 
sdlkhs 
kjshdfkh 
sdkjfhsdf 
3 33333 3 Rap 
xxxxx 
PayröÈöè÷÷(÷H÷h÷÷¨÷È÷èøø(øHøhøø¨øÈøèùù(ùHùhùù¨ùÈùèúú(úHúhúú¨úÈúèûû(ûHûhûû¨ûÈûèüü(üHühüü¨üÈüèýý(ýHýhý 
! sdkjfhsdf!õüöýÄõ¼5! 
sadljkhfds!þõÜö|ö\ 
þx þ  þÈ þð ÿ ÿ@ ÿh ÿ ÿ¸ ÿà 0 X ¨ Ð ø 
    enter code here 
    enter code here 

Répondre

5

Très probablement, l'une de vos méthodes retourne une chaîne char * incorrecte (non null terminé).

Editer: en fait, pas seulement un: getPlaylistName(), getSongName() et getArtistName().

+1

... ou un pointeur qui pend (pour empiler, dans la mémoire qui a été libérée, la mémoire qui a été déplacée [par exemple réaffectée]), ou ils retournent un 'std :: string' construit à partir d'un tel pointeur. – vladr

+0

Comment puis-je résoudre ce problème? – Gabe

+0

@Gabe Renvoie simplement une chaîne char * terminée par null valide ou utilise std :: string. –

Questions connexes