由于某种原因,输入文件中的完整行不会读入数组,只会读取每行中的第一个单词。我目前正在使用getline调用,但我不确定它为什么不起作用。这是我填充数组的调用。 txt文件是歌曲列表。
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 :(得分:2)
while (count < numTracks && inputFile >> tracks[count])
>>
运算符读取单个单词。此代码将此单个单词读入相关的向量中。
getline(inputFile, track);
是的,你正在使用getline()
。在初始单词之后读取该行的其余部分,转换为一些名为track
的无关变量。 track
似乎是一个非常无聊的std::string
,显然会在循环的每次迭代中被覆盖,否则会被完全忽略。
答案 1 :(得分: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_iterator
和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();