【发布时间】:2012-01-16 07:15:57
【问题描述】:
我有一个关于 C 编程的问题。它与二进制文件有关。在我的代码中(至少想象我)让它从二进制文件中读取和写入,但由于某种原因它不会这样做.我试过改变一些东西,但我在任何地方都看不到错误。这只是这个最小的细节让我很难过,这是在代码完成之前剩下的所有内容然后我完全完成了这个程序,所以它比平时更让我紧张。请指出我没有做什么以及我应该做些什么来让它读取和写入二进制文件正确:
#define MAX 4
//========================-STRUCTURE-=====================================================================
struct person{
char name[30];
char mail[30];
char tele[30];
};
struct person p[MAX];
//========================-MAIN FUNCT-===============================================================
int main()
{
bool continue=true,exists=false;
int answer,i;
char filnme[20];
FILE *fil;
printf("Would you like to open an already existing file?[y/n]: ");
scanf("%d",&answer);
if(answer=='y'||answer=='Y')
{
finns=true;
}
else finns=false;
getchar();
printf("\n\nType the name of the file you will use: ");
scanf("%s",filnme);
if(exists)
{
fil = fopen(filnme,"rb");
for(i=0;i<MAX;i++)
{
while(feof(fil)==0)
{
fread(&p, MAX, 1, fil);
printf("%s %s %s\n",p.name,p.mail,p.tele);
}
}
fclose(fil);
}
else fil = fopen(filnme,"wb");
do
{
system("cls");
int choice;
printf("What would you like to do?");
printf("\n_______________\n");
printf("1. Add another person to the list\n");
printf("2. Print the entire list\n");
printf("3. Remove information from the list\n");
printf("4. Sort\n");
printf("5. Change information\n");
printf("6. Search\n");
printf("7. Exit\n");
printf("\nChoice: ");
scanf("%d",&choice);
printf("\n");
system("cls");
switch(choice)
{
case 1:
addtolist();
getch();
break;
case 2:
write();
getch();
break;
case 3:
remove();
getch();
break;
case 4:
sort();
getch();
break;
case 5:
change();
getch();
break;
case 6:
search();
getch();
break;
case 7:
continue=false;
break;
default:
printf("Not a valid choice!");
getch();
break;
}
}while(continue);
for(i=1;i<=MAX;i++)
{
fwrite(&p, MAX, 1, fil);
}
fclose(fil);
system("cls");
}
别在意函数的声明之类的,我已经涵盖了,只是我放入 main 中的二进制文件处理。
提前致谢!
【问题讨论】:
-
在使用指针之前检查
fopen()是否成功! -
您将得到是否打开现有文件到变量
finns的答案;然后您使用exists来决定是打开文件进行读取还是写入。 -
您有一个名为“continue”的变量——这是 C/C++ 中的保留字。
-
对不起,我的意思是把“finns”改成“exists”,我用瑞典语写代码,但为了更清楚,我翻译了它。然后“继续”;我对那个变量还有另一个词。
标签: c list binary file-handling