c++ - 在 C++ 错误中读取空格分隔值文件

标签 c++ file-io

我正在尝试从文件中获取浮点值以在我的程序中使用它们。我使用以下论坛来构建程序Read file line by line .
但这样做获得的值似乎在最后被截断了。

我的代码

#include <iostream>
#include <cstring>
#include <sstream>
#include <fstream>
using namespace std;

int main()
{

ifstream file;
file.open("test_file.ssv");
string line;
while(file.good() && (getline(file, line)))
{
    istringstream iss(line);
    double a, b, c;
    iss >> a >> b >>c ;
    cout << a <<endl;
}
file.close();
return (0);
}

我获得的输出是

9292.31
32432.2

虽然我的文件有以下数据

9292.3123 4234.66 342.25423
32432.2423 3423.656 341.67841

对此有何改进建议?

最佳答案

您的标准流可能具有较低的浮点精度,因此当使用 std::cout 输出 float 时,您只能看到一些小数。使用 std::ios_base::precision 提高精度,并研究使用 std::ios::floatfield 输出固定或科学精度,例如:

// modify precision
#include <iostream>     // std::cout, std::ios

    int main () {
      double f = 3.14159;
      std::cout.unsetf ( std::ios::floatfield );                // floatfield not set
      std::cout.precision(5);
      std::cout << f << '\n';
      std::cout.precision(10);
      std::cout << f << '\n';
      std::cout.setf( std::ios::fixed, std:: ios::floatfield ); // floatfield set to fixed
      std::cout << f << '\n';
      return 0;
    }

输出:

3.1416 3.14159 3.1415900000

关于c++ - 在 C++ 错误中读取空格分隔值文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18121602/

相关文章:

java - Printwriter 目的地问题

C++ 将内部枚举用于类模板

c++ - 将行代码从C++转换为C

.net - 为什么.net中没有异步文件删除功能?

c++ - 打开根目录下的文本文件

java - HttpClient 和上传进度 - ProgressListener 缺失

c++ - 在 Debian 8.3 ARM 上构建 Boost 单元测试框架

c++ - System() 函数,并从中调用 Internet Explorer,Dev C++

c++ - 固定大小数组的 vector

java - 读取文本文件时出现空指针异常