1.请改这段代码到能够运行
2.这个代码和链表是混着的
3.二进制文件怎么打开与改写
#include <stdio.h>
typedef struct FamilyMember {
char name[10]; //name
short age; //age
double weight;//weight
char type[10]; //cat dog human or others
struct FamilyMember* next;
};
void printFamilyMember(struct FamilyMember* p);
void printFamilyList(struct FamilyMember* head);
void inputFamilyMember(struct FamilyMember* p);
struct FamilyMember* insertListAtTail(struct FamilyMember* head, struct FamilyMember* node);
struct FamilyMember* insertListAtHead(struct FamilyMember* head, struct FamilyMember* node);
struct FamilyMember* deleteNodeFromList(struct FamilyMember* head, int age);
int main(int argc, char* argv[]) {
struct FamilyMember* head = NULL;
struct FamilyMember* pMember;
char* filename;
FILE* pFILE;
int i = 0;
filename = "FamilyList.bi";
pFile=fopen_(&pFile, filename, "rb");
if (pFile == NULL) {
printf("Error happened when open file %s \n", filename);
}
// 简单但有bug
while (!feof(pFile)) //当未读取文件尾标志
{
pNode = (struct FamilyMember*)malloc(sizeof(struct FamilyMember));
fread(pNode, sizeof(*pNode), 1, pFile);
pNode->next = NULL;
head = insertListAtTail(head, pNode);
}
fclose(pFile);
printFamilyList(head);
return 0;
}
for (i = 0; i < 5; i++) {
pMember = (struct FamilyMember*)malloc(sizeof(struct FamilyMember));
inputFamilyMember(pMember);
pMember->next = NULL;
head = insertListAtTail(head, pMember);
}
printFamilyList(head) {
head = deleteNodeFromList(head, 5);
printf("after\n");
printFamilyList(head);
return 0;
}
}
void printFamilyMember(struct FamilyMember* p) {
printf("名字:%s\n", (*p).name);
printf("年龄:%d\n", (*p).age);
printf("体重:%.2lf\n", (*p).weight);
printf("种类:%s\n\n", (*p).type);
//please finish
return;
}
void inputFamilyMember(struct FamilyMember* p) {
printf("pelase input name age weight type in order\n ");
scanf_s("%s", p->name, sizeof(p->name));
scanf_s("%d", &(p->age));
scanf_s("%lf", &(p->weight));
scanf_s("%s", p->type, sizeof(p->type));
return;
}