用C逐行写入文件

时间:2019-05-14 16:51:55

标签: c input output

我目前正在尝试获取代码,以完全按照打印方式将数据写入文件。
由于某些原因,当我之后打开文本文件时,只有二进制数据。
如何将其转换为可读格式?

代码:

#include <stdio.h>

void calcData(float *x,float* y){
    float tmpX,tmpY,a,b;
    a = 2.75;
    b = 0.2;
    tmpX = *x;
    tmpY = *y;
    *x = tmpY;
    *y = (-b*tmpX) + (a*tmpY) - (tmpY*tmpY*tmpY);
    return;
}

int main(){

    FILE *datei;
    float x = 0.5;
    float y = 0.5;
    int i;
    for(i=0;i<1000;i++){
        calcData(&x,&y);
        printf("%f \t %f \n",x,y);
        datei=fopen("txt.txt","a");
        fwrite(&x,1,sizeof(float),datei);
        fwrite("\t",1,sizeof(char),datei);
        fwrite(&y,1,sizeof(float),datei);
        fwrite("\n",1,sizeof(char),datei);
        fclose(datei);

    }
}

1 个答案:

答案 0 :(得分:6)

  

当我之后打开文本文件时,只有二进制数据。

因为这样做

   fwrite(&x,1,sizeof(float),datei);
   ..
   fwrite(&y,1,sizeof(float),datei);

您编写浮点数的内部表示形式。

例如,前两个值是x = 0.500000和y = 1.150000,它们的内部表示形式是0x3f000000和0x3f933333(IEEE浮点数在32b上)。因此,当您 fwrite 依赖于 endianness 的4个字节的内存支持它们的值时,您将为 x 和0x3f 0x93编写代码0x3f 0x0 0x0 0x0 0x33 0x33表示 y 的顺序相反

  

如何将其转换为可读格式?

fprintf(datei, "%f\t%f\n", x, y);

与您进行printf("%f \t %f \n",x,y);

的方式相同

(请注意,printf("%f \t %f \n",x,y);实际上是fprintf(stdout, "%f \t %f \n",x,y);,因此,如果这是标准输出的正确方法,它也位于文件中)

最好将datei=fopen("txt.txt","a"); 移动到之前,将fclose(datei); 移动到之后,