我有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(正确)
-5.143241e + 303
的 UPD2
我做了一点研究:
当我将%e
替换为%le
时,我得到-2.000000e+000
结果是否定的,尽管我使用的是abs()
,因为我认为这是由于fprintf
互相lond double
错误所致。
是否可以使用long double
打印*printf
?