找出c语言程序的错误

来源:百度知道 编辑:UC知道 时间:2024/06/08 12:37:53
void changebook()
{
char a[10];
struct book *p1,*p2,*head;
int b,n;
FILE*fp;
p1=p2=head=NULL;
fp=fopen("D:\\book.txt","r");
if(fp==NULL)
{
printf("create file error!\n");
return;
}

n=0;
do
{
n=n+1;
fscanf(fp,"%s%s%d%s%s%d",p1->name,p1->serialnumber,&p1->price,p1->author,p1->publishhouse,&p1->num);
printf("%s\t%s\t%d\t%s\t%s\t%d\n",p1->name,p1->serialnumber,p1->price,p1->author,p1->publishhouse,p1->num);
if(n==1) head=p1;
else p2->next=p1;
p2=p1;
}while(p1!=NULL);
printf("请输入要修改记录的编号:");
scanf(" %s",a);
while(strcmp(p1->serialnumber,a[10])!=0&&p1!=NULL)
{
p1=p1->next;
}
if(strcmp(p1->serialnumber,a[10])==0)

程序缺的太多了,没法调试,
但是一眼就可以看出有一个错误:
fscanf(fp,"%s%s%d%s%s%d",p1->name,p1->serialnumber,&p1->price,p1->author,p1->publishhouse,&p1->num);
用"%s%s%d%s%s%d"这种格式控制符接收输入,
前一个字符串接收时会将后面的字符也会一起读入,
最好这么写:
fscanf(fp,"%s,%s,%d,%s,%s,%d",p1->name,p1->serialnumber,&p1->price,p1->author,p1->publishhouse,&p1->num);
或者
fscanf(fp,"%s %s %d %s %s %d",p1->name,p1->serialnumber,&p1->price,p1->author,p1->publishhouse,&p1->num);
输入时,将各个信息用逗号或者空格隔开

请加上错误信息,再帮你看