2016-04-28 50 views
2

我想在一个C代码的微小变化,以便仔细检查一些results.Just一些相关线路如何将二进制输出更改为ascii?

FILE   *f1_out, *f2_out; 

/* open files */ 
if ((f1_out = fopen(vfname, "w")) == (FILE *) NULL) 
{ 
    fprintf(stderr, "%s: Can't open file %s.\n", progname, vfname); 
    return (-1); 
} 

然后去一些计算和

yes = fwrite(vel, nxyz*sizeof(float), 1, f1_out); 

如何改变最后一行获取ascii输出?

+7

为什么不简单地用fprintf()替换它? – GMichael

+3

请注意,如果您打开文件以二进制模式写入,模式参数应该是“”wb“'。而且,不需要用'(FILE *)'来强制'NULL'。 – user694733

回答

1

相反的yes = fwrite(vel, nxyz*sizeof(float), 1, f1_out);,使用

for(i = 0; i < nxyz; ++i) { 
    yes &= (fprintf(f1_out, "%d:\t%f\n", i, vel[i]) > 0); 
} 
+1

按位写入并与写入字符数量的位似乎是一件很奇怪的事情。 –

+0

@ ThomasPadron-McCarthy它是'fprintf(..)> 0'。失败时'fprintf'返回负值。对于float,如果成功则必须返回'> 0'。 –

+1

啊,对。现在我明白了。对困惑感到抱歉。 –

2

假设你vel是float数组,你的nxyz是数组中浮子数量,并且要在标准输出,而不是在你打开文件的输出:

for (int i = 0; i < nxyz; ++i) { 
    printf("vel[%d] = %f\n", i, vel[i]); 
} 
1

要查看所有meaningful digitsfloat文本使用printf("%*e", some_precision, some_float)

#include <float.h> 
fprintf(f1_out, "%.*e\n", FLT_DECIMAL_DIG - 1, *vel);