我試圖做一個程序,創建並讀取一個二進制文件,其中包含「結構元素」;你能告訴我我做錯了什麼嗎? 我得到的錯誤告訴我,「s」不是函數fread()中的指針...所以我聲明ELEM * s;而不是ELEM的;fread和fwrite在C
#include <stdio.h>
#include <stdlib.h>
typedef struct element{
char name[80];
int p;
}ELEM;
void create()
{
FILE *f;
int d=0;
char c;
ELEM *s;
f=fopen("file.bin","wb");
do{
printf("Add elements to file?: (y/n)");
fflush(stdin);
scanf("%c",&c);
if (c=='y')
{
printf("Name=");
gets((*s).name);
printf("P=");
scanf("%d",(*s).p);
fwrite(s,sizeof(ELEM),1,f);
}
} while(d==0);
fclose(f);
}
void show()
{
FILE *f;
ELEM *s;
f=fopen("file.bin","rb");
while(feof(f)!=NULL)
{
fread(s,sizeof(ELEM),1,f);
puts((*s).name);
printf("\t%d\n",(*s).p);
}
fclose(f);
}
void add()
{
FILE *f;
int d=0;
char c;
ELEM *s;
f=fopen("file.bin","ab");
do{
printf("Add elements to file?: (y/n)");
fflush(stdin);
scanf("%c",&c);
if (c=='y')
{
printf("Name=");
gets((*s).name);
printf("P=");
scanf("%d",(*s).p);
fwrite(s,sizeof(ELEM),1,f);
}
} while(d==0);
fclose(f);
}
/*void function()
{
}*/
int main()
{
int k=0,r;
do{
printf("1 - create file\n2 - add elements to fil\n3 - show elements\n4 - put unique elements in another file\n5 - exit program\n");
scanf("%d",&r);
switch(r)
{
case 1 : create(); break;
case 2 : add(); break;
case 3 : show(); break;
case 4 : printf("Function not defined!\n"); break;
case 5 : k=1; break;
default : printf("Command unrecognized!\n");
}
} while(k==0);
return 0;
}
在旁註:'fflush(stdin)'是絕對錯誤的。另外,'gets()'不能安全使用。請參閱'fgets()'而不是(您可以將它傳遞給stdin)。 – FatalError 2012-01-28 17:34:49