求助求组,VS2010写C的课程设计,程序说类型不兼容
求组啊各位大神 - - 这个到底是什么原因啊
超市管理.c(160): warning C4133: “=”: 从“ware *”到“sp *”的类型不兼容
超市管理.c(160): warning C4133: “<”: 从“ware *”到“sp *”的类型不兼容
超市管理.c(160): error C2036: “sp *”: 未知的大小
超市管理.c(162): error C2037: “num”的左侧部分指定未定义的结构/联合“sp”
//超市商品排序系统14.2的设计
//录入,输出,保存(至文件),查看(从文件中);
//按类别排序输出,按数量排序输出,按单价排序输出;
//超市商品管理系统(商品编号,商品名称,单价,数量,类别)
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int count;
struct ware
{int sn; //编号
char name[8]; //名称
float jg; //价格
int num; //数量
int sort; //类别
}sp[30]={0};
struct sp *p;
void input()
{
printf("商品编号: ");
scanf("%d",&sp[count].sn);
printf("商品名称(4字以内): ");
scanf("%s",&sp[count].name);
printf("商品价格: ");
scanf("%f",&sp[count].jg);
printf("商品数量: ");
scanf("%d",&sp[count].num);
printf("商品类别(1~8): ");
scanf("%d",&sp[count].sort);
count++;
printf("按任意键返回");
getchar(); //任意键返回
}
void output()
{
int i;
system("cls");
printf("\n商品编号 商品名称 价格 数量 类别\n");
for(i=0;i<count;i++)
{printf("\n%d %s %d %d %d\n",sp[i].sn,sp[i].name,sp[i].jg,sp[i].num,sp[i].sort);}
printf("按任意键返回");
getchar();
}
void del()
{int m,k,n,s=0;
printf("请输入商品编号: \n");
scanf("%d",&m);
for(k=0;k<30;k++)
{if(sp[k].sn==m)
{for(n=k;n<29;n++)
{sp[n].sn=sp[n+1].sn;
strcpy(sp[n].name,sp[n+1].name);
sp[n].jg,sp[n+1].jg;
sp[n].num,sp[n+1].num;
sp[n].sort,sp[n+1].sort;
}count--;s=1;};}
if(s==0)
printf("无该商品信息.\n");
getchar();
}
void coma() //根据数量排序
{int k,t,i;
float o;
char n[20];
for(k=0;k<30;k++)
for(i=0;i<30-k;i++)
if(sp[i].num>sp[i+1].num&&sp[i].num!=0&&sp[i+1].num!=0)
{t=sp[i].num;
sp[i].num=sp[i+1].num;
sp[i+1].num=t;
o=sp[i].jg;
sp[i].jg=sp[i+1].jg;
sp[i+1].jg=o;
t=sp[i].sn;
sp[i].sn=sp[i+1].sn;
sp[i+1].sn=t;
t=sp[i].sort;
sp[i].sort=sp[i+1].sort;
sp[i+1].sort=t;
strcpy(n,sp[i].name);
strcpy(sp[i].name,sp[i+1].name);
strcpy(sp[i+1].name,n);
printf("排序结束!\n");
output();
}}
void comb() //根据价格排序
{int k,t,i;
float o;
char n[20];
for(k=0;k<30;k++)
for(i=0;i<30-k;i++)
if(sp[i].jg>sp[i+1].jg&&sp[i].jg!=0&&sp[i+1].jg!=0)
{t=sp[i].num;
sp[i].num=sp[i+1].num;
sp[i+1].num=t;
o=sp[i].jg;
sp[i].jg=sp[i+1].jg;
sp[i+1].jg=o;
t=sp[i].sn;
sp[i].sn=sp[i+1].sn;
sp[i+1].sn=t;
t=sp[i].sort;
sp[i].sort=sp[i+1].sort;
sp[i+1].sort=t;
strcpy(n,sp[i].name);
strcpy(sp[i].name,sp[i+1].name);
strcpy(sp[i+1].name,n);
printf("排序结束!\n");
output();
}}
void comc() //按类别排序
{int k,t,i;
float o;
char n[20];
for(k=0;k<30;k++)
for(i=0;i<30-k;i++)
if(sp[i].sort>sp[i+1].sort&&sp[i].sort!=0&&sp[i+1].sort!=0)
{t=sp[i].num;
sp[i].num=sp[i+1].num;
sp[i+1].num=t;
o=sp[i].jg;
sp[i].jg=sp[i+1].jg;
sp[i+1].jg=o;
t=sp[i].sn;
sp[i].sn=sp[i+1].sn;
sp[i+1].sn=t;
t=sp[i].sort;
sp[i].sort=sp[i+1].sort;
sp[i+1].sort=t;
strcpy(n,sp[i].name);
strcpy(sp[i].name,sp[i+1].name);
strcpy(sp[i+1].name,n);
printf("排序结束!\n");
output();
}}
void save()
{FILE *fp;
fp=fopen("cs.out","wb");
for(count=0;count<30;count++)
{fwrite(&sp[count],sizeof(struct ware),1,fp);}
fclose(fp);
}
void main()
{char c;
int i;
FILE *fp;
fp=fopen("cs.out","rb");
if(fp!=0)
{for(p=sp;p<sp+30;p++)
{fread(p,sizeof(struct ware),1,fp);
if(p->num)
count++;}
}
printf("\n\n\n\n\n\t\t\t 欢迎使用超市管理系统14.2");
printf("\n\n\n\t\t\t\t制作人: ");
printf("\n\n\t\t\t\t 2012年6月");
printf("\n\n\n\n\n\t按任任意键进入主菜单"); //欢迎界面
getchar();
do
{system("cls");
for(i=0;i<80;i++)
printf("\t\t 1:录入一个商品信息\n");
printf("\t\t 2.删除某一商品信息\n");
printf("\t\t 3.根据数量排序并输出\n");
printf("\t\t 4.根据价格排序并输出\n");
printf("\t\t 5.根据类别排序并排序\n");
printf("\t\t 6.保存\n");
printf("\t\t 7.输出商品信息\n");
printf("\t\t 0.退出\n");
printf("\t\t 请选择输入选项(1,2,3,4,5,6,7,0)\n");
printf("\n\t\t 目前有%d个商品信息\n",count);
for(i=0;i<80;i++) printf("*");
do
{c=getchar();}
while(c!='1'&&c!='2'&&c!='3'&&c!='4'&&c!='5'&&c!='6'&&c!='7'&&c!='0');
getchar();
switch(c)
{case'1':input();break;
case'2':del();break;
case'3':coma();break;
case'4':comb();break;
case'5':comc();break;
case'6':save();break;
case'7':output();break;
case'0':system("cls");exit(0);}
printf("按任意键返回主菜单\n");
getchar();
system("cls");
}while(1);
}
[解决办法]
struct ware
{int sn; //编号
char name[8]; //名称
float jg; //价格
int num; //数量
int sort; //类别
}sp[30]={0};
struct sp *p;
p就是ware[30]的指针, 很显然, ware*和 ware[30]*的类型是不兼容的。你程序有问题