2016-07-27 52 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

你是不是做與內環路'track'什麼。 – user657267

回答

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

>>操作讀一個字。這段代碼將這個單詞讀入問題的向量中。

getline(inputFile, track); 

確實,您正在使用getline()。要將最後一個單詞之後的剩餘部分讀入一個名爲track的無關變量中。 track似乎是一個非常無聊的std::string,顯然,在循環的每次迭代中都會被覆蓋,否則將被完全忽略。

+0

因爲「追蹤」也有感覺。 –

+0

無論如何要改變它以便它讀取完整的行。我已經嘗試過放入曲目[count]而不是曲目,每次我都會遇到程序的災難性故障。 –

+0

當然有,但「災難性失敗」不是一個有用的問題描述。 –

0

您的循環正在使用operator>>將文件讀入陣列。該操作符一次讀取一個單詞。你需要徹底刪除操作,並使用std::getline()填補陣列,如:

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_iteratorstd::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(); 
相關問題