2016-07-27 11 views
0

何らかの理由で、入力ファイルの全行が配列に読み込まれず、各行の最初の単語だけが読み込まれます。私は現在getline呼び出しを使用していますが、なぜ動作していないのか分かりません。ここでは、配列にデータを読み込むための呼び出しがあります。 txtファイルは曲のリストです。C++で入力ファイルを文字列配列に読み込むにはどうすればよいですか?

const int numTracks = 25; 
string tracks[numTracks]; 
int count = 0, results; 
string track, END; 

cout << "Reading SetList.txt into array" << endl; 

ifstream inputFile; 
inputFile.open("SetList.txt"); 
while (count < numTracks && inputFile >> tracks[count]) 
{ 
    count++; 
    getline(inputFile, track); 
} 
inputFile.close(); 
+0

ループ内では「トラック」は何もしていません。 – user657267

答えて

2
while (count < numTracks && inputFile >> tracks[count]) 
>>

オペレータは、単一のワードを読み出します。そして、このコードは、この単一の単語を問題のベクトルに読み込みます。

getline(inputFile, track); 

実際には、getline()を使用しています。最初の単語の後の残りの行を、trackという無関係の変数に読み込む。 trackは、ループのすべての反復で上書きされるように見え、それ以外は完全に無視されるように、非常に退屈なようです(std::string)。

+0

'track'にも気持ちがあるので、投票が行われました。 –

+0

それを変更してフルラインを読むようにしてください。トラックの代わりにトラック数を入れようとしましたが、毎回このプログラムの致命的な失敗が発生します。 –

+0

もちろんありますが、 "壊滅的な失敗"は有用な問題の説明ではありません。 –

0

ループはoperator>>を使用してファイルをアレイに読み込みます。その演算子は、一度に1単語を読み込みます。

const int numTracks = 25; 
std::string tracks[numTracks]; 
int count = 0; 

std::cout << "Reading SetList.txt into array" << std::endl; 

std::ifstream inputFile; 
inputFile.open("SetList.txt"); 
while (count < numTracks) 
{ 
    if (!std::getline(inputFile, tracks[count])) break; 
    count++; 
} 
inputFile.close(); 

または::また

const int numTracks = 25; 
std::string tracks[numTracks]; 
int count = 0; 

std::cout << "Reading SetList.txt into array" << std::endl; 

std::ifstream inputFile; 
inputFile.open("SetList.txt"); 
while ((count < numTracks) && (std::getline(inputFile, tracks[count])) 
{ 
    count++; 
} 
inputFile.close(); 

std::vectorの代わりに、固定された配列を使用することを検討して、その後、あなたはstd::istream_iteratorを使用することができますが、完全にその演算子を削除し、配列を埋めるためにstd::getline()を使用し、例えばする必要がありますstd::back_inserterを使用すると、手動ループを完全に取り除くことができます。

class line : public std::string {} 

std::istream& operator>>(std::istream &is, line &l) 
{ 
    return std::getline(is, l); 
} 

... 

std::vector<std::string> tracks; 

std::cout << "Reading SetList.txt into array" << std::endl; 

std::ifstream inputFile; 
inputFile.open("SetList.txt"); 

std::copy(
    std::istream_iterator<line>(inputFile), 
    std::istream_iterator<line>(), 
    std::back_inserter(tracks) 
); 

inputFile.close(); 
関連する問題