如何正确地将文件的流替换为fprintf / fscanf?

时间:2015-10-29 15:06:07

标签: c++ printf filestream

我有fstreams的程序(它工作正常)

#include <cstdio>
#include <fstream>
#include <vector>
#include <cassert>
using namespace std;

template <class T>
T abs(T x)
{
    return x < 0 ? -x : x;
}

struct point
{
    double x;
    double y;
};

int main(int argc, char const *argv[])
{
    // FILE *in  = fopen("in.txt", "r"), 
    //      *out = fopen("out.txt", "w");
    // if (!in or !out) exit(1);

    ios_base::sync_with_stdio(false);
    ifstream fin("in.txt");
    ofstream fout("out.txt");

    int n;

    //fscanf(in, "%d", &n);

    fin >> n;

    long double S = 0.0;

    vector <point> v(n);
    double minx = 1, miny = 1;

    for (int i = 0; i < n; ++i)
    {
        // fscanf(in, "%e%e", &(v[i].x), &(v[i].y));

        fin >> v[i].x >> v[i].y;
    }
    //...

    // fprintf(out, "%e", abs(S));

    fout << abs(S);
}

但是当我取消注释它(并注释掉流)时,我得到了错误的结果。

我做错了什么? 也许我正在使用fscanf / fprintf的不正确的修改器?

UPD

输入:4 0 0 3 0 1 1 0 3

输出流:

3(正确)

使用fscanf:

-5.143241e + 303


UPD2

我做了一点研究:
当我将%e替换为%le时,我得到-2.000000e+000
结果是否定的,尽管我使用的是abs(),因为我认为这是由于fprintf互相lond double错误所致。

是否可以使用long double打印*printf

0 个答案:

没有答案