在这里,我尝试让 getData 读取文本文件的内容,并将文件的每一行存储为向量中的单独字符串元素。
bool getData(const std::string& inputLocation, std::vector<std::string>& data)
{
// TODO: Complete this function, and fix return value
std::ifstream inputFile(inputLocation);
if (!inputFile.is_open())
{
return false;
}
std::string line;
while (std::getline(inputFile, line))
{
data.push_back(line);
}
inputFile.close();
return true;
}
给定的txt文件是这样的:
YVOHJEZQLDITAUPKWBRCMXGNSF // first line
HELLOWORLD // second line
// Note that this is the third line with absolutely nothing in it.
问题是,当我测试 getData 是否正常工作时,它没有正常工作。原因是 getData 应该读取三行而不是两行。
如果第3行没有数据,连换行符都没有,例如:
YVOHJEZQLDITAUPKWBRCMXGNSF<break>
HELLOWORLD<break>
那么从第 3 行就没有任何内容可读取,因此
getline()
将设置 failbit
和 eofbit
标志,从而在读取第 2 行后中断循环。
如果第3行没有数据但有换行符,例如:
YVOHJEZQLDITAUPKWBRCMXGNSF<break>
HELLOWORLD<break>
<break>
然后从第 3 行读取一些内容,因此
getline()
将成功并且尚未设置任何标志,并为第 3 行返回一个空字符串。