2016-05-17 50 views
0

試圖學習C語言基礎知識。我正在向一個文件寫入一個數組。我成功地將數據寫入文件並將其讀回。然而,數據以二進制形式寫入文件,這是不可讀的。 我們怎樣才能將數據寫入文件,以便它可以以人類可讀的格式存儲。將數組寫入C中的文件,文件應該是可讀的格式

#include<stdio.h> 

    typedef struct array 
    { 
     int n; 
     int arr[100]; 
    } array_t; 

    void print_array(array_t e) 
    { 
     printf("%s\n", __FUNCTION__); 
     int i = 0; 
     for(i = 0; i < e.n; i++) 
      printf("%d\n", e.arr[i]); 
    } 

    int main() 
    { 
     FILE *f1; 
     array_t e, f; 
     int i; 

     printf("Enter Array Size:\n"); 

     scanf("%d",&e.n); 

     for(i = 0; i < e.n; i++) 
     { 
      int temp; 
      printf("Enter %dth element\n", i+1); 
      scanf("%d",&temp); 
      e.arr[i] = temp; 
     } 

     print_array(e); 

     f1 = fopen("one.txt", "wb+"); 
     int ret = fwrite(e.arr, sizeof(int), e.n, f1); 

     fclose(f1); 

     f1 = fopen("one.txt", "rb"); 
     f.n = e.n; 

     for(i = 0; i < e.n; i++) { 
      int temp = 0; 
      fread(&temp, sizeof(int), 1, f1); 
      f.arr[i] = temp; 
     } 

     printf("This is read array\n"); 
     print_array(f); 

     return 0; 
    } 
+1

整型轉換爲字符串,這些操作和寫入字符串。 – trojanfoe

+0

您需要一個不是數組值域的一部分的分隔符號。 – jboockmann

+0

我相信fwrite應該有你所抱怨的行爲。看看fprintf,它可能是你正在尋找的。 (http://www.cplusplus.com/reference/cstdio/fprintf/) –

回答

0

freadfwrite是二進制流輸入/輸出功能。它們並不是將格式化數據寫入輸出流的正確工具。

看看fprintffscanf。他們應該更接近你要找的東西。

0

在這種情況下,「人類可讀」是指ASCII,所以如果你想有字符 0到9中的文件,你必須寫數字的0x30到0x39(或字符「0」到' 9' )

1

您的代碼應該是這樣的:

f1 = fopen("one.txt", "w"); 

而且所有fread - >fscanffwrite - >fprintf

而且在環(fprintf