语法错误修改如下,请自行对比程序中的不同之处,并以此为准:
//------------------------------------------------
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct DRESS
{
char name[32];
char id[16];
char norm[64];
char producer[64];
char designer[64];
double fix_price;
double price;
long int number;
char date[16];
} DRESS;
int append(FILE *fp,int num);
int set_number(FILE *fp,int num);
int question(FILE *fp);
int print(FILE *fp);
int main(void)
{
int key;
FILE *fp;
int num;
key=1;
if((fp=fopen("Dress","rb"))==NULL)
{
printf("can't open file\n");
printf("create new file: press 5\n");
printf("don't create new file: press 6\n");
scanf("%d",&key);
if(key==5)
{
if((fp=fopen("Dress","wb"))==NULL)
{
printf("can't create file\n");
return 2;
}
fclose(fp);
}
else return 3;
}
while(key)
{
printf("append new dress: press 1\n");
printf("reset number: press 2\n");
printf("question information based on name: press 3\n");
printf("print sorted result: press 4\n");
printf("exit: press 0\n");
scanf("%d",&key);
switch(key)
{
case 1:
if((fp=fopen("Dress","ab"))==NULL)
{
printf("can't open file\n");
return 4;
}
printf("How many to append\n");
scanf("%d",&num);
append(fp,num);
fclose(fp);
break;
case 2:
if((fp=fopen("Dress","rb+"))==NULL)
{
printf("can't open file\n");
return 5;
}
printf("How many to reset\n");
scanf("%d",&num);
set_number(fp,num);
fclose(fp);
break;
case 3:
if((fp=fopen("Dress","rb"))==NULL)
{
printf("can't open file\n");
return 6;
}
question(fp);
fclose(fp);
break;
case 4:
if((fp=fopen("Dress","rb"))==NULL)
{
printf("can't open file\n");
return 7;
}
print(fp);
fclose(fp);
break;
default:
key=0;
}
}
return 0;
}
int append(FILE *fp,int num)
{
struct DRESS dress;
char t;
if(num<1) return 1;
printf("Please input information of each dress\n");
while(num--)
{
printf("name=");
scanf("%s",dress.name);
printf("id=");
scanf("%s",dress.id);
printf("norm=");
scanf("%s",dress.norm);
printf("producer=");
scanf("%s",dress.producer);
printf("designer=");
scanf("%s",dress.designer);
printf("fixed price=");
scanf("%lf",&dress.fix_price);
printf("number=");
scanf("%ld",&dress.number);
printf("CAUTION: Please input date like 2008.07.06(year.month.day)\n");
printf("date=");
scanf("%s",dress.date);
t=dress.date[6];
switch(t)
{
case '1':
case '2':
case '3':dress.price=0.9*dress.fix_price;
break;
case '4':
case '5':
case '6':dress.price=0.8*dress.fix_price;
break;
default:dress.price=0.7*dress.fix_price;
}
fwrite(&dress,sizeof(struct DRESS),1,fp);
}
return 0;
}
int set_number(FILE *fp,int num)
{
char id[16];
int sell;
int buy;
struct DRESS dress;
if(num<1) return 1;
while(num--)
{
printf("Please input id of the dress\n");
scanf("%s",id);
printf("How many sold\n");
scanf("%d",&sell);
printf("How many bought\n");
scanf("%d",&buy);
while(!feof(fp))
{
int offset;
fread(&dress,sizeof(DRESS),1,fp);
if(strcmp(dress.id,id)==0)
{
dress.number=dress.number-sell+buy;
offset=sizeof(DRESS);
offset=-offset;
fseek(fp,offset,1);
fwrite(&dress,sizeof(DRESS),1,fp);
return 2;
}
}
printf("Not found\n");
}
return 0;
}
int question(FILE *fp)
{
char name[32];
struct DRESS dress;
printf("Please input name\n");
scanf("%s",name);
while(!feof(fp))
{
fread(&dress,sizeof(DRESS),1,fp);
if(strcmp(dress.name,name)==0)
{
printf("name=");
printf("%s\n",dress.name);
printf("id=");
printf("%s\n",dress.id);
printf("norm=");
printf("%s\n",dress.norm);
printf("producer=");
printf("%s\n",dress.producer);
printf("designer=");
printf("%s\n",dress.designer);
printf("fixed price=");
printf("%lf\n",dress.fix_price);
printf("price=");
printf("%lf\n",dress.price);
printf("number=");
printf("%ld\n",dress.number);
printf("date=");
printf("%s\n",dress.date);
return 1;
}
}
printf("Not found\n");
return 0;
}
int print(FILE *fp)
{
struct DRESS dress[200];
int num;
int i,j;
struct DRESS dress0;
num=0;
while(!feof(fp))
{
fread(dress+num,sizeof(DRESS),1,fp);
num++;
}
for(i=1;i<num;i++)
for(j=0;j<num-i;j++)
if(dress[j].number>dress[j+1].number)
{
dress0=dress[j];
dress[j]=dress[j+1];
dress[j+1]=dress0;
}
for(i=0;i<num;i++)
{
printf("name=");
printf("%s ",dress[i].name);
printf("id=");
printf("%s ",dress[i].id);
printf("number=");
printf("%ld\n",dress[i].number);
}
for(i=1;i<num;i++)
for(j=0;j<num-i;j++)
{
if(strcmp(dress[j].date,dress[j+1].date)>0)
{
dress0=dress[j];
dress[j]=dress[j+1];
dress[j+1]=dress0;
}
}
for(i=0;i<num;i++)
{
printf("name=");
printf("%s ",dress[i].name);
printf("id=");
printf("%s ",dress[i].id);
printf("date=");
printf("%s\n",dress[i].date);
}
return 0;
}
//------------------------------------------------
温馨提示:答案为网友推荐,仅供参考