免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1005 | 回复: 0
打印 上一主题 下一主题

请教C文件问题(TC 2.0下),紧急!!万分感谢!!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-12-21 17:22 |只看该作者 |倒序浏览
我在程序中定义了
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=&order;
  }
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;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP