gpt4 book ai didi

c - 将两个以上的 "struct"写入文件的问题,然后读取文件

转载 作者:太空宇宙 更新时间:2023-11-04 08:47:30 25 4
gpt4 key购买 nike

我在将多个结构写入文件然后关闭程序时遇到了一些问题。下次我打开文件并打印其中的内容时,它会显示奇怪的文本。

如果我只选择打印 1 个结构加上强制性的第一个说明文件中有多少结构(文件中的第一个)它显示正确。但是一旦有两个以上 http://imgur.com/ANTCSAZ .

我一直在寻找解决方案几个小时,但找不到,非常感谢我能得到的所有帮助! :)

#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <stdlib.h>
//#include "allafunktioner.h"

struct vinnare{
int ar;
char namn[20];
};
struct vinnare *inlasningTillFil(struct vinnare *vinnare, int antalvinnareinlasning);
int meny();

int vinnarear(int ar, char namnlista, int vinnare);
void artistnamn(int ar, char namnlista, int vinnare);
void skrivutalla(int ar, int namnlista, int vinnare);

main(){
int a=1, val, antalvinnareinlasning,test=0;

struct vinnare *vinnare;

FILE *file;
file = fopen("F:\\Uppgifter", "rb");

if (file == NULL){

vinnare = NULL;
printf("Ange antal vinnare:");
scanf("%d", &antalvinnareinlasning);
vinnare = (struct vinnare *)malloc(antalvinnareinlasning*sizeof(struct vinnare));
vinnare = inlasningTillFil(vinnare, antalvinnareinlasning);
}
else{

fread(&antalvinnareinlasning, sizeof(int), 1, file);
printf("%d", antalvinnareinlasning);
vinnare =(struct vinnare *)malloc(antalvinnareinlasning*sizeof(struct vinnare));

for (a = 1; a < (antalvinnareinlasning + 1); a++){
fread(&vinnare[a].ar, sizeof(int), 1, file);
fread(&vinnare[a].namn, sizeof(char)*20, 1, file);
printf("%d", vinnare[a].ar);
printf("%s", vinnare[a].namn);
}


}
fflush(stdin);
getchar();
}


struct vinnare *inlasningTillFil(struct vinnare *vinnare, int antalvinnareinlasning){
int a, temp;

FILE *file;
file = fopen("F:\\Uppgifter", "wb");

vinnare[0].ar = antalvinnareinlasning;


fwrite(&vinnare[0], sizeof(struct vinnare),1, file);


for (a = 1; a < (antalvinnareinlasning + 1); a++){
printf("Ange vilket år du vill mata in: ");
scanf("%d", &temp);
vinnare[a].ar = temp;
fflush(stdin);

printf("Ange vinnaren för det året:");
fgets(vinnare[a].namn, 20, stdin);
fflush(stdin);

fwrite(&vinnare[a], sizeof(struct vinnare), 1, file);
}

}

最佳答案

对于 struct 数据的第一个 block ,您写道:

fwrite(&vinnare[0], sizeof(struct vinnare),1, 文件);

sizeof(struct vinnare) 字节数据

但你只阅读int

fread(&antalvinnareinlasning, sizeof(int), 1, 文件);

即4字节数据

因此 file 指针仅前进 4 个字节并指向 20 个字节的垃圾数据,然后是您使用 for 编写的下一个数据 block 在函数 inlasningTillFil 中。

关于c - 将两个以上的 "struct"写入文件的问题,然后读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21107245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com