2011-01-09 31 views
6

我用下面的代碼寫一個一維數組到一個文件:寫二維數組到一個文件用C

FILE *fp; 
float floatValue[5] = { 1.1F, 2.2F, 3.3F, 4.4F, 5.5F }; 
int i; 

if((fp=fopen("test", "wb"))==NULL) { 
    printf("Cannot open file.\n"); 
} 

if(fwrite(floatValue, sizeof(float), 5, fp) != 5) 
    printf("File write error."); 
fclose(fp); 

/* read the values */ 
if((fp=fopen("test", "rb"))==NULL) { 
    printf("Cannot open file.\n"); 
} 

if(fread(floatValue, sizeof(float), 5, fp) != 5) { 
    if(feof(fp)) 
     printf("Premature end of file."); 
    else 
     printf("File read error."); 
} 
fclose(fp); 

for(i=0; i<5; i++) 
    printf("%f ", floatValue[i]); 

我的問題是,如果我想寫入和讀取二維數組?

回答

6

您可以使用同樣的方法...只是作出如下改變

float floatValue[3][5] = {{ 1.1F, 2.2F, 3.3F, 4.4F, 5.5F }, 
          { 6.6F, 7.7F, 8.8F, 9.9F, 8.8F }, 
          { 7.7F, 6.6F, 5.5F, 4.4F, 3.3F }}; 
int i,j; 

...

if(fwrite(floatValue, sizeof(float), 3*5, fp) != 3*5) 

...

if(fread(floatValue, sizeof(float), 3*5, fp) != 3*5) { 

...當然

for(j=0; j<3; j++) { 
    for(i=0; i<5; i++) 
     printf("%f ", floatValue[j][i]); 
    printf("\n"); 
} 

注意,特別是如果你想有不同的編譯器/系統之間,甚至只是與未來的一些兼容性,這不是保存/加載數據的最佳方式。 保存和恢復的主題通常被命名爲serialization,只有非常小的次要開銷,您可以獲得更多的靈活性,尤其是一旦數據模型變得更加複雜。

3

而不是一個單一的循環中,您將添加另一種如:

for(i=0;i<lines;i++) { 
for(j=0;j<num;j++) { 
    fprintf(file,"%d ",array[i][j]); 
} 
fprintf(file,"\n");} 
+0

雖然這是合理的代碼,但操作系統正在尋找某些東西來寫入/讀取數組的二進制表示。 – EvilTeach 2012-05-12 16:37:07