【问题标题】:Writing a file line by line in C用C逐行写入文件
【发布时间】:2019-05-14 16:51:54
【问题描述】:

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

代码:

#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);

    }
}

【问题讨论】:

  • 你应该使用fprintf——就像你使用printf一样。
  • "将数据完全按照打印的方式写入文件" .那是什么意思?写入文件和打印到文件有什么区别。 “打印方式”与“写入方式”完全相同。
  • 另一种方式是重定向程序输出,例如myprogram &gt; txt.txt
  • OT:关于:float x = 0.5;float y = 0.5;a = 2.75;b = 0.2; 被声明的文字是 doubles,而不是 floats 要生成 floats,每个文字必须包含尾随f,例如:0.2f

标签: c input output


【解决方案1】:

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

因为做

   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);之后循环

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多