Запись файла построчно в C - PullRequest
0 голосов
/ 14 мая 2019

В настоящее время я пытаюсь заставить свой код записывать данные в файл точно так, как он их печатает.
По какой-то причине, когда я открываю текстовый файл впоследствии, появляются только двоичные данные.
Как мне получитьчто в читаемом формате?

код:

#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 Ответ

6 голосов
/ 14 мая 2019

когда я впоследствии открываю текстовый файл, есть только двоичные данные.

, потому что при

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

вы пишете внутреннее представлениечисла с плавающей точкой.

Например, первая пара значений x = 0.500000 и y = 1.150000, их внутреннее представление 0x3f000000 и 0x3f933333 (IEEE с плавающей точкой 32b).Поэтому, когда вы пишете 4 байта памяти, поддерживающие их значение в зависимости от порядка байтов , вы пишете коды 0x3f 0x0 0x0 0x0 для x и 0x3f 0x93 0x33 0x33 для y из них в обратном порядке

Как мне перевести это в читаемый формат?

do

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); после петли

...