[英]How do I get an input file to read into a string array in C++?
由於某些原因,我輸入文件中的全部行都不會讀入數組,而只會讀入每行的第一個單詞。 我目前正在使用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();
while (count < numTracks && inputFile >> tracks[count])
>>
運算符讀取一個單詞。 此代碼將單個單詞讀入相關向量。
getline(inputFile, track);
是的,您正在使用getline()
。 將第一個單詞后的其余行讀入一些無關的變量track
。 track
似乎是一個非常無聊的std::string
,顯然,它在循環的每次迭代中都會被覆蓋,否則將被完全忽略。
您的循環正在使用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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.