Stringstream没有显示输出

时间:2017-11-07 17:45:14

标签: c++

我正在尝试逐行打印文件中的某些文本。文件中的文字是:

  

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

1 个答案:

答案 0 :(得分:4)

你在ssout中没有任何内容的原因是你执行时已经读取了文件的内容

 PrintNew(fin, std::cout);

之后,无法从fin读取任何内容。

您可以使用以下方法之一重新读取文件的内容。

  1. 关闭fin并重新打开该文件。
  2. 清除fin的错误状态,并使用以下命令将其位置设置为文件的开头:

    fin.clear();
    fin.seekg(0);