- 论坛徽章:
- 0
|
我在程序中定义了
struct product
{
char name[10];
float quantity;
char price[10];
char discount[10];
char date[9];
};
struct product prod[4],order[4],*orderpoint[4];
FILE *sf,*inf,*outf;
char filein[]="in.txt";
char jdate[9];
其中用prod[0]以文本形式写入in.txt
以下是写入文件的函数的节选
if((inf=fopen(filein,"a" )==NULL)
{
gotoxy(3,16);
cprintf("Can't open %s",filein);
getch();
break;
}
else
{
gotoxy(3,16);
cprintf("The note has been added into %s",filein);
fwrite(&prod[0],sizeof(struct product),1,inf);
fclose(inf);
}
然后我想用order[0],以同样方式,每次读出一个单位的结构体数据,经判断后,有选择地赋给order[]数组其他变量,一直循环读取到文件的末尾,然后对order[]数组中的元素进行排序。程序编译都没问题,运行的时候,每次进入该项的结果不同,与测试数据所预想的值不同。不知道每次以添加的形式写入文件,会不会由于是文件结束,而另外添加什么标记?源程序如下:
void save_in_order()
{
int i;
order_link_prod();
printf("********List someday's products saved into storage by quantity order********" ;
draw_border(2,4,78,24);
goto(3,5);
cprintf(" lease input the date of which you want to list the note(yymmdd):" ;
scanf("%s",jdate);
inf=fopen(filein,"r" ;
while(feof(inf)==0)
{
fread(&order[0],sizeof(struct product),1,inf);
if(strcmp(order[0].date,jdate)==0)
{
for(i=1;i<N;i++)
{
if(strcmp(order[0].name,order.name)==0)
order.quantity=order.quantity+order[0].quantity;
}
}
}
fclose(inf);
digi_order_order();
}
void order_link_prod()
{
int i;
for(i=1;i<N;i++)
{
strcpy(order.name,prod.name);
strcpy(order.price,prod.price);
strcpy(order.discount,prod.discount);
strcpy(order.date,jdate);
}
}
void init_order_point()
{
int i;
for(i=1;i<N;i++)
{
orderpoint=ℴ
}
return;
}
void show_order_point()
{
int i;
draw_border(2,4,78,24);
textcolor(GREEN);
gotoxy(2,1);
cprintf("No. Name Quantity Price(per) Discount Date" ;
for(i=1;i<N;i++)
{
gotoxy(2,1+i);
cprintf("%d",i);
gotoxy(8,1+i);
cprintf("%s",(*orderpoint).name);
gotoxy(18,1+i);
cprintf("%6.2f",(*orderpoint).quantity);
gotoxy(30,1+i);
cprintf("%s",(*orderpoint).price);
gotoxy(43,1+i);
cprintf("%s",(*orderpoint).discount);
gotoxy(54,1+i);
cprintf("%s",(*orderpoint).date);
}
return;
}
void digi_order_order()
{
int i,j;
clrscr();
printf("******Show the list of storage by quantity******" ;
init_order_point();
for(j=1;j<N;j++)
{
for(i=1;i<N-j;i++)
if(order.quantity<order[i+1].quantity)
{orderpoint[0]=orderpoint;orderpoint=orderpoint[i+1];orderpoint[i+1]=orderpoint[0];}
}
show_order_point();
init_order_point();
window(1,1,80,25); /*恢复原窗口大小*/
return;
} |
|