流不按预期方式工作(Streams dont work as expected)

2019-10-19 19:21发布

我有这个问题,需要非常快的解决。 这是我的代码:

    void stypendium() {
        string tresc = "";
        string temp;
        stringstream ss;
        fstream file;
        vector<float> grades;
        float grade, sum, av;
        file.open(this->plik, ios_base::in);
        if(!file.is_open()) {
            ofstream fileTmp(this->plik);
            fileTmp.close();
            file.open(this->plik, ios_base::in);
        }
        while (file >> temp) {
            if(strspn( temp.c_str(), "-.0123456789" ) == temp.size()) {
                ss.str("");
                ss << temp;
                ss >> grade;
                grades.push_back(grade);
            }
        };
        sum = 0;
        for(int i=0;i<grades.size();++i) {
            sum += grades[i];
        }
        av = sum / grades.size();
        cout << sum << "/" << grades.size() << "=" << av;
        file.close();
    }

};

问题是,在线路

SS <<温度;


没有获取到数据流,虽然温度具有价值;

Answer 1:

使用ss.clear()成员函数来适当地准备stringstream的用于第一和连续级值。 下面是引用: 性病:: basic_ios ::清晰 。 请记住, clear()可以抛出异常。


根据最新的源代码编辑,while循环体几乎与以前一样。

 while (file >> temp) {
     if(strspn( temp.c_str(), "-.0123456789" ) == temp.size()) {
         ss.str("");
         //
         // Call the clear() member function here
         //
         ss.clear(); 
         ss << temp;
         ss >> grade;
         grades.push_back(grade);
     }
 };

由线的基础的线具有成绩值一个简单的测试文件,已获得的每一行一个单一的时间,以及最后一个输入文件级值被添加到等级矢量只有一次。



Answer 2:

您还需要调用ss.clear(); 后做ss.str("");

其原因是,当字符串流被提取浮动,如果达到字符串的结尾之前,肯定已经完成读取float那么它将设置eof上的流状态。 然后,因为eof设置,未来的转换失败。 你必须clear()重置eof状态。



文章来源: Streams dont work as expected