- 論壇徽章:
- 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
以下是寫入文件的函數(shù)的節(jié)選
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],以同樣方式,每次讀出一個單位的結構體數(shù)據,經判斷后,有選擇地賦給order[]數(shù)組其他變量,一直循環(huán)讀取到文件的末尾,然后對order[]數(shù)組中的元素進行排序。程序編譯都沒問題,運行的時候,每次進入該項的結果不同,與測試數(shù)據所預想的值不同。不知道每次以添加的形式寫入文件,會不會由于是文件結束,而另外添加什么標記?源程序如下:
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;
} |
|