我將一些浮點值寫入二進制檔案,然后我想用另一個.c程式讀回它們。
我是這樣寫的:
#include <stdio.h>
int main() {
/* Create the file */
float x = 1.1;
FILE *fh = fopen ("file.bin", "wb");
if (fh != NULL) {
for (int i = 0; i < 10; i)
{
x = 1.1*i;
fwrite (&x,1, sizeof (x), fh);
printf("%f\n", x);
}
fclose (fh);
}
return 0;
}
這就是我想閱讀它們的方式:
#include <stdio.h>
int main(){
/* Read the file back in */
FILE *fh = fopen ("file.bin", "wb");
float x = 7.7;
fh = fopen ("file.bin", "rb");
if (fh != NULL) {
while(!feof(fh)){
if(feof(fh))
break;
fread (&x, 1, sizeof (x), fh);
printf ("Value is: %f\n", x);
}
fclose (fh);
}
return 0;
}
但是我得到了 7.7,這意味著讀者從未找到任何值。
我怎樣才能做到這一點?我在這里錯過了什么?
uj5u.com熱心網友回復:
在您的第二個程式中,FILE *fh = fopen ("file.bin", "wb");打開檔案進行寫入并將其截斷為零長度,從而破壞其中的資料。將其更改為FILE *fh = fopen ("file.bin", "rb");并洗掉以后的fh = fopen ("file.bin", "rb");.
另外,不要feof用于測驗檔案中是否有更多資料。feof僅報告前一次讀或寫操作是否發生 EOF 或錯誤。如果沒有嘗試讀取過去,它不會告訴您檔案位置指示器當前指向檔案末尾。相反,檢查 的回傳值fread以查看它讀取了多少項。
如果使用size_t result = fread(&x, 1, sizeof (x), fh);,則要求fread讀取sizeof (x)位元組,它會回傳讀取的位元組數。如果小于sizeof (x),則x未讀取完整。相反,如果使用size_t result = fread(&x, sizeof x, 1, fh);,則要求fread讀取 1 個大小為 的物件sizeof x。然后fread將回傳讀取的完整物件的數量,這將是 0 或 1。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/338872.html
下一篇:如何在兩個指標之間列印字串?
