2016-07-27 50 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(); 
相关问题