我正在尝试逐行打印文件中的某些文本。文件中的文字是:
1999 Ford Ranger 3000 156000使用
2000 Mazda Miata 4000 98000使用
2015款Jeep Wrangler 33000 250新款
这是我的主要功能:
int main()
{
std::ifstream fin; // 'f'ile in - fin
std::string filename = "cars.txt";
bool isOpen = GetInputFileStream(&fin, filename); std::cout << filename << " open: ";
std::cout << std::boolalpha << isOpen << std::endl;
PrintNew(fin, std::cout);
std::stringstream ssout;
PrintNew(fin, ssout);
PrintLine(std::cout, "SS: " + ssout.str());
std::cout << "Press ENTER to continue";
std::cin.get();
return 0;
}
PrintLine功能:
void PrintLine(std::ostream & sout, std::string s)
{
sout << s << std::endl;
}
getinputfilestream函数打开指定的文件和printnew函数,其中包含以下代码:
PrintNew功能
void PrintNew(std::istream & fin, std::ostream & fout)
{
int modelYear, Price, Mileage;
std::string Make, Model, Condition;
while (fin >> modelYear >> Make >> Model >> Price >> Mileage >> Condition) {
if (Condition == "new")
{
fout << modelYear << " " << Make << " " << Model << " " << Price << " " << Mileage << "\n";
}
}
}
打印列为新的汽车。然后将stringstream转换为std :: string,但在这种情况下,只显示printnew函数的输出,并且应该出现在SS之后的文本:永远不会。我尝试在不同的位置使用fin.clear(),但无济于事,是否有一些我不知道的东西?
我的输出:
opening file cars.txt
cars.txt open: true
2015 Jeep Wrangler 33000 250
SS:
Press ENTER to continue
正确输出:
opening file cars.txt
cars.txt open: true
2015 Jeep Wrangler 33000 250
SS: 2015 Jeep Wrangler 33000 250
Press ENTER to continue
答案 0 :(得分:4)
你在ssout
中没有任何内容的原因是你执行时已经读取了文件的内容
PrintNew(fin, std::cout);
之后,无法从fin
读取任何内容。
您可以使用以下方法之一重新读取文件的内容。
fin
并重新打开该文件。清除fin
的错误状态,并使用以下命令将其位置设置为文件的开头:
fin.clear();
fin.seekg(0);