C++ 数据流不能按预期工作
我有这个问题,需要快速解决。这是我的密码:C++ 数据流不能按预期工作,c++,string,stream,stringstream,C++,String,Stream,Stringstream,我有这个问题,需要快速解决。这是我的密码: void stypendium() { string tresc = ""; string temp; stringstream ss; fstream file; vector<float> grades; float grade, sum, av; file.open(this->plik, ios_base::
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();
}
};
void stypendium(){
字符串tresc=“”;
字符串温度;
细流ss;
流文件;
病媒等级;
浮动等级、总和、平均值;
打开(this->plik,ios_base::in);
如果(!file.is_open()){
流文件tmp(this->plik);
fileTmp.close();
打开(this->plik,ios_base::in);
}
while(文件>>temp){
如果(strspn(temp.c_str(),“-.0123456789”)==temp.size()){
ss.str(“”);
ss>grade;
坡度。向后推(坡度);
}
};
总和=0;
对于(inti=0;i您还需要在执行ss.str(“”;
之后调用ss.clear();
)
原因是,当stringstream提取浮点值时,如果它在明确读取浮点值之前到达字符串的末尾,那么它将在流上设置eof
状态。然后,由于设置了eof
,未来的转换将失败。您必须清除()
重置eof
状态。使用ss.clear()
成员函数为第一个和连续的等级值正确准备stringstream。以下是参考:。请记住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);
}
};
while(文件>>temp){
如果(strspn(temp.c_str(),“-.0123456789”)==temp.size()){
ss.str(“”);
//
//在这里调用clear()成员函数
//
ss.clear();
ss>grade;
坡度。向后推(坡度);
}
};
一个简单的测试文件具有逐行的等级值,每行只获得一次,最后一个输入文件的等级值只添加到等级向量中一次。EOF的常见错误测试-测试成功输入,而不是查看:这不是问题所在,但多亏了你,我找到了解决方案。不管怎样,有什么问题吗关于我的主要问题的建议?当然我理解,主要问题是ss没有ss.str()
,ss由于输入文件的布局未知,我为我们其余的人添加了ss.str(“”
)。