float 存檔問題

#include<iostream>

#include<stdio.h>

using namespace std;

FILE *fp;

class tlu

{

public:

float x;

float tlu1(float y)

{

x=y;

}

}one;

int main(int argc, char *argv[])

{

char an[]="change.out";

float y;

cout<<"輸入一個數字:";

cin>>y;

one.tlu1(y);

fp=fopen(an,"wb");

fwrite(one.x,sizeof(float),sizeof(x),fp); /*錯誤的地方*/

fclose(fp);

system("PAUSE");

}

我想請讓人輸入一個float的數字,然後存檔,但是卻無法存檔

請各位大大幫忙解答,謝謝

4 Answers

Rating
  • Lv 7
    1 decade ago
    Favorite Answer

    fwrite()的定意是

    fwrite(const void *buf, size_t size, size_t count, FILE *fd);

    buf是你要寫出的資料的記憶體住址.

    size是一組的大小

    count是要讀幾組

    fd是檔案.

    所以你的

    fwrite(one.x,sizeof(float),sizeof(x),fp);

    應是

    fwrite(

    &one.x, /* one裡x的記憶體住址 */

    sizeof(float), /* float的大小 */

    1, /* 1個float */

    fp); /* 檔案 */

    你這樣是用binary的方法寫.若要用數字的方法寫請參考耗呆小綿羊的回答.

    題外話

    你的程式裡有一些問題.

    1. tlu1()這個成員函式的回傳型態是float.但在tlu1()裡並無return.

    2. main()這個主函式的回傳型態是int.但在main()裡並無return.

    懂不懂?不懂請再問.

    Source(s): Myself
  • 1 decade ago

    不建議用 ASCII 存 float / double!

    又慢、檔案又大、又不容易知道內容多少!

    最糟的是:會失真!!

    所以,原因及龍大的回答是對的。

  • 1 decade ago

    用 sprintf ,轉成 字串格式,再寫入檔案

    程式碼...自己想......

    自己寫過之後,東西才是自己的

  • 1 decade ago

    //Power by Visual Studio 2005

    //Download Site: http://www.microsoft.com/taiwan/vstudio/express/

    #include<stdio.h>

    #include<stdlib.h>

    int main(int argc, char* argv[]){

    //=====START=====//

    FILE *f;

    char fn[]="float_out.txt";

    double dNum;

    f=fopen(fn,"w");

    if(f!=NULL){

    printf("Input a Double: "),scanf("%lf",&dNum);

    fprintf(f,"%lf\n",dNum);

    }

    fclose(f);

    //=====END=====//

    system("PAUSE");

    return 0;

    }

    Source(s): 單純的吸語言寫法
Still have questions? Get your answers by asking now.