std::stringstream operator>> 无法将字符串转换为浮点数
std::stringstream operator>> fails to convert string to float
我不明白为什么第二个 >> 失败了。我是不是做错了什么或遗漏了一些代码?
std::ifstream file;
std::stringstream ss;
std::string str;
float f1, f2;
file.open("file.txt");
getline(file, str);
ss.str(str);
ss >> f1;
getline(file, str);//when packed inside if(), evalueates to true
ss.str(str);
ss >> f2; //when packed inside if(), evalueates to false - but why it fails?
std::cout<<"str = "<<str<<"\n";
std::cout<<"ss.str() = "<<ss.str()<<"\n";
std::cout<<"f1 = "<<f1<<"\nf2 = "<<f2<<"\n";
文件:
0.120000
0.120000
输出:
str = 0.120000
ss.str() = 0.120000
f1 = 0.12
f2 = 2.06831e+032
我已经在多个文件上尝试过这段代码,显然只有第一次插入 float 有效,文件末尾有一个空行
编辑
正如 Dan 指出的那样,我尝试直接从文件中提取浮点数:
file.open("file.txt");
file >> f1;
file >> f2;
工作理想;也简化了很多代码
您必须在第二次尝试读取之前添加以下语句:
ss.clear();
为什么?
因为当您阅读第一行时,字符串流包含 "0.120000"
和 ss>>f1
将导致 ss
到达文件末尾。这样就设置了eof标志。
当您使用 str()
重置字符串流的内容时,您不会重置状态标志,因此读取尝试将失败。在重置字符串流的内容后添加 ss.clear() 将纠正这种情况。
我不明白为什么第二个 >> 失败了。我是不是做错了什么或遗漏了一些代码?
std::ifstream file;
std::stringstream ss;
std::string str;
float f1, f2;
file.open("file.txt");
getline(file, str);
ss.str(str);
ss >> f1;
getline(file, str);//when packed inside if(), evalueates to true
ss.str(str);
ss >> f2; //when packed inside if(), evalueates to false - but why it fails?
std::cout<<"str = "<<str<<"\n";
std::cout<<"ss.str() = "<<ss.str()<<"\n";
std::cout<<"f1 = "<<f1<<"\nf2 = "<<f2<<"\n";
文件:
0.120000
0.120000
输出:
str = 0.120000
ss.str() = 0.120000
f1 = 0.12
f2 = 2.06831e+032
我已经在多个文件上尝试过这段代码,显然只有第一次插入 float 有效,文件末尾有一个空行
编辑
正如 Dan 指出的那样,我尝试直接从文件中提取浮点数:
file.open("file.txt");
file >> f1;
file >> f2;
工作理想;也简化了很多代码
您必须在第二次尝试读取之前添加以下语句:
ss.clear();
为什么?
因为当您阅读第一行时,字符串流包含 "0.120000"
和 ss>>f1
将导致 ss
到达文件末尾。这样就设置了eof标志。
当您使用 str()
重置字符串流的内容时,您不会重置状态标志,因此读取尝试将失败。在重置字符串流的内容后添加 ss.clear() 将纠正这种情况。