【问题标题】:Writing an array to a file in C, File should be in human readable format用C将数组写入文件,文件应为人类可读格式
【发布时间】:2016-05-17 12:19:38
【问题描述】:

尝试学习 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;
    }

【问题讨论】:

  • 将整数转换为字符串并写入字符串。
  • 您需要一个不属于您的数组值域的分隔符。
  • 我相信 fwrite 应该有你抱怨的行为。看看 fprintf,它可能就是你要找的。 (cplusplus.com/reference/cstdio/fprintf)
  • 您使用printf 以人类可读的格式打印到屏幕上,然后使用fprintf 在文件中执行相同操作。
  • ...使用f1 = fopen("one.txt", "wt")以文本模式打开文件后

标签: c arrays file


【解决方案1】:

你的代码应该是这样的:

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

还有所有fread -> fscanf , fwrite -> fprintf

还有循环中的这些操作 (fprintf)

【讨论】:

    【解决方案2】:

    freadfwrite 是二进制流输入/输出函数。它们并不是将格式化数据写入输出流的真正正确工具。

    看看fprintffscanf。它们应该更接近您要查找的内容。

    【讨论】:

      【解决方案3】:

      在这种情况下,“人类可读”表示 ASCII,因此如果您想在文件中包含 字符 0 到 9,您必须写入 数字 0x30 到 0x39 (或字符 '0' 到 '9')

      【讨论】:

        猜你喜欢
        • 2017-01-28
        • 1970-01-01
        • 1970-01-01
        • 2010-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-03
        • 2012-11-12
        相关资源
        最近更新 更多