float 存檔問題

2008-05-03 4:41 pm
#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)

2008-05-04 6:52 am
✔ 最佳答案
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.
懂不懂?不懂請再問.
參考: Myself
2008-05-05 2:29 pm
不建議用 ASCII 存 float / double!
又慢、檔案又大、又不容易知道內容多少!
最糟的是:會失真!!

所以,原因及龍大的回答是對的。
2008-05-04 6:40 am
用 sprintf ,轉成 字串格式,再寫入檔案

程式碼...自己想......
自己寫過之後,東西才是自己的
2008-05-04 6:37 am
//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;
}
參考: 單純的吸語言寫法


收錄日期: 2021-04-27 17:14:57
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20080503000016KK02030

檢視 Wayback Machine 備份