将用户的输入写入二进制文件

Posted

技术标签:

【中文标题】将用户的输入写入二进制文件【英文标题】:write input from user in binary file 【发布时间】:2021-08-17 16:59:34 【问题描述】:

我正在尝试从用户那里获取输入并将其写入二进制文件。这是我的代码,它运行平稳,但是当我尝试在另一个程序中读取文件时,文件不会打开(显示为 NULL),所以我不确定为什么数据没有保存到文件中。

这是我的代码:

#include <stdio.h>
#include <stdlib.h>

int length=2, width=2;

struct LandData

    int height;
;

struct LandData* WritingData()

    FILE *fptr;
    struct LandData *arr = (struct LandData*)malloc(length* width* sizeof(struct LandData));

    if ((fptr = fopen("data.bin","wb")) == NULL)
       printf("Error! opening file");
        exit(1);
    

    for (int i = 0; i < length ; i++)
        for (int j = 0; j < width; j++)
            printf("choose height: ");
            scanf("%d", &(arr + i*width + j)->height);
            fwrite(arr, sizeof(struct LandData), 1, fptr);
        
    

    fclose(fptr);
    return(arr);


int main()

    struct LandData *arr =WritingData();
    free(arr);
    return 0;


这是阅读部分的代码:

#include <stdio.h>
#include <stdlib.h>

int length =2 , width =2;

struct LandData

    int height;
;

int main()

    FILE *fptr;
    struct LandData *arr = (struct LandData*)malloc(length* width* sizeof(struct LandData));

   if ((fptr = fopen("data.bin","rb")) == NULL)
       printf("Error! opening file");
       exit(1);
   

    while(fread(arr,sizeof(struct LandData),1,fptr))
    
        for (int i = 0; i < length ; i++) 
            printf(" %d| ", i);
            for (int j = 0; j < width; j++)
            printf(" %d ", (arr + i*width + j)->height);
            printf("\n");
        

        if(fclose(fptr)!=0)
        
        perror("Error on file closing after reading");
        exit(2);
        
    

    free(arr);
    return 0;

【问题讨论】:

"该文件无法打开的另一个程序"。请出示该代码。 fwrite(arr, sizeof(struct LandData), 1, fptr); 只写出数组的一个条目,它始终是第一个条目。 如果您想像“文本”编辑器一样在程序中读取文件,请将数据保存为文本。例如使用fprintf. fopen 未能获得更具体的错误消息时,呼叫perror @kaylum 如何让它写多个条目? 【参考方案1】:
while(fread(arr,sizeof(struct LandData),1,fptr)) 

替换为

while(fread(arr,sizeof(struct LandData),1,fptr) != EOF)

注意EOF不是0,或者false或者NULL,它是一个值 你可以通过做这样的事情来试试这个

if(EOF)
   printf("something")

【讨论】:

以上是关于将用户的输入写入二进制文件的主要内容,如果未能解决你的问题,请参考以下文章

将结构写入二进制文件 C++ 时遇到问题

PHP 不会打开 fifo 进行写入

将输入中的数据以二进制形式写入和存储,例如数组

VBS操作文本文件的问题

c# 将字符串以二进制形式写入文件

尝试将数字写入二进制文件时引发异常