2011-01-09 16 views
6

tôi sử dụng để sử dụng mã dưới đây để Viết một mảng 1D đến một File:viết mảng 2ngày vào một tập tin trong 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]); 

Câu hỏi của tôi là nếu tôi muốn viết và đọc mảng 2D ??

Trả lời

6

Bạn có thể sử dụng phương pháp tương tự ... chỉ cần làm những điều sau đây thay đổi

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"); 
} 

Lưu ý tất nhiên rằng đây không phải là cách tốt nhất để lưu/tải dữ liệu đặc biệt nếu bạn muốn có một số khả năng tương thích giữa các trình biên dịch/hệ thống khác nhau hoặc thậm chí chỉ với tương lai. Chủ đề lưu và khôi phục thường được đặt tên là serialization và chỉ với một chi phí nhỏ rất nhỏ, bạn có thể nhận được sự linh hoạt hơn đặc biệt khi mô hình dữ liệu trở nên phức tạp hơn.

3

Thay vì một duy nhất cho vòng lặp bạn sẽ thêm một một ví dụ khác:

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

trong khi đây là mã hợp lý, op đang tìm kiếm một cái gì đó để viết/đọc biểu diễn nhị phân của mảng. – EvilTeach