|
出现错误
[root@localhost ~]# gcc jan.c -o jan
jan.c: In function ‘load’:
jan.c:98: error: incompatible types in assignment
jan.c: In function ‘insert’:
jan.c:132: error: incompatible types in assignment
jan.c: In function ‘edit’:
jan.c:255: error: incompatible types in assignment
错误是什么意思啊,怎么排除,急~~~~~
下面是源代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <curses.h>
typedef struct{
char sno[10];
char sname[10];
char ssex[10];
int sage[10];
char sdept[10];
}student;
typedef struct slink{
student *s;
struct slink *next;
}slink;
typedef struct{
slink *first;
int length;
slink *end;
}sdata;
char tag='=';
char *arg[10];
int obj=-1;
int chang=0;
char filename[100];
void init(sdata *s)
{
s->end=NULL;
s->length=0;
s->first=NULL;
}
void save(sdata s)
{
FILE *p;
slink *q;
if(filename[0]=='\0')
{
printf("lease Input Filename:");
scanf("%s",filename);
}
p=fopen(filename,"wb");
q=s.first;
while(q)
{
fwrite(q->s,sizeof(student),1,p);
q=q->next;
}
printf("Save OK!\n");
chang=0;
fclose(p);
}
void end(sdata *s)
{
slink *p,*q;
char ch;
if(chang)
{
printf("reservation Change?(Y/N)");
do
ch=getch();
while(ch!='Y' && ch!='y' && ch!='N' && ch!='n');
printf("\n");
if(ch=='Y'||ch=='y')save(*s);
}
p=s->first;
while(p)
{
q=p;
p=p->next;
free(q->s);
free(q);
}
}
void load(sdata *s)
{
FILE *p;
slink *q;
char ch;
student ss;
if((p=fopen(arg[1],"rb"))==NULL)
{
printf("File Not Fonud!\n");
return;
}
end(s);
strcpy(filename,arg[1]);
init(s);
while(fread(&ss,sizeof(student),1,p))
{
q=(slink *)malloc(sizeof(slink));
q->s=(student *)malloc(sizeof(student));
strcpy(q->s->sno,ss.sno);
strcpy(q->s->sname,ss.sname);
strcpy(q->s->ssex,ss.ssex);
q->s->sage=ss.sage;
strcpy(q->s->sdept,ss.sdept);
q->next=NULL;
if(!s->first) s->first=q;
else s->end->next=q;
if(!s->end) s->end=q;
else s->end=s->end->next;
s->length++;
}
chang=0;
printf("Load OK!\n");
fclose(p);
}
void insert(sdata *s,int j)
{
slink *p,*q1,*q2;
int i;
i=obj;
q1=p=s->first;
while(p)
{
if(strcmp(p->s->sno,arg[j])==0)
{
printf("insert ERROR!(sno repeat)\n");
return;
}
p=p->next;
}
p=(slink *)malloc(sizeof(slink));
p->s=(student *)malloc(sizeof(student));
strcpy(p->s->sno,arg[j]);
strcpy(p->s->sname,arg[j+1]);
strcpy(p->s->ssex,arg[j+2]);
p->s->sage=stoi(arg[j+3]);
strcpy(p->s->sdept,arg[j+4]);
if(i==-1)
{
p->next=NULL;
s->end->next=p;
s->end=p;
}
else
{
if(i)
{
while(i--){q2=q1;q1=q1->next;}
p->next=q1;
q2->next=p;
}
else
{
p->next=s->first;
s->first=p;
}
}
s->length++;
if(!s->first)s->first=p;
if(!s->end)s->end=p;
if(s->end->next)s->end=s->end->next;
chang=1;
printf("Insert OK!\n");
}
int stoi(char *s)
{
int j=0,i=0;
while(s!='\0')
{
j=j*10+s[i++]-'0';
}
return j;
}
void delete(sdata *s)
{
slink *p,*q;
int i;
p=q=s->first;
if(!p)
{
printf("Data is NULL!\n");
return;
}
i=stoi(arg[1]);
if(i<1||i>s->length)
{
printf("Input ERROR!\n");
return;
}
while(--i){q=p;p=p->next;}
if(!p->next) s->end=q;
if(p==q)
s->first=p->next;
else
q->next=p->next;
free(p->s);
free(p);
chang=1;
s->length--;
printf("Delete OK!\n");
}
void list(sdata s)
{
slink *p;
int i=0;
p=s.first;
if(!p)
{
printf("Data is NULL!\n");
return;
}
printf("%-6c%-12s%-12s%-12s%-12s%-12s\n",' ',"Sno","Sname","Ssex","Sage","Sdept");
while(p)
{
printf("%-6d%-12s%-12s",++i,p->s->sno,p->s->sname);
printf("%-12s%-12d%-12s\n",p->s->ssex,p->s->sage,p->s->sdept);
p=p->next;
if(i%23==0&&p)
{
printf("lease input any key!");
getch();
printf("\n");
printf("%-6c%-12s%-12s%-12s%-12s%-12s\n",' ',"Sno","Sname","Ssex","Sage","Sdept");
}
}
}
int set(char *s,sdata ss)
{
int i;
i=stoi(s);
if(i>ss.length||i<0)
{
printf("arg ERROR!\n");
return 0;
}
else obj=i;
return 1;
}
void edit(sdata *s)
{
slink *p;
int i;
p=s->first;
i=stoi(arg[1]);
if(i<1||i>s->length)
{
printf("Input ERROR!\n");
return;
}
while(--i)p=p->next;
strcpy(p->s->sname,arg[2]);
strcpy(p->s->ssex,arg[3]);
strcpy(p->s->sdept,arg[5]);
p->s->sage=stoi(arg[4]);
printf("Edit OK!\n");
}
main()
{
sdata s;
char c,buf[100];
char *input;
int i,j,k,leng;
init(&s);
while(1)
{
printf("<%c>",tag);
leng=0;
c=getchar();
while(c!='\n')
{
buf[leng++]=c;
c=getchar();
}
buf[leng]='\0';
input=(char *)malloc((leng+1)*sizeof(char));
strcpy(input,buf);
for(i=0,j=0,k=0;i<=leng;i++)
{
if(input==' '||input=='\t'||input==','||input=='\0')
{
if(j==0) continue;
else
{
buf[j++]='\0';
arg[k]=(char *)malloc(j*sizeof(char));
strcpy(arg[k],buf);
j=0;k++;
}
}
else buf[j++]=input;
}
free(input);
if(k==0) continue;
strlwr(arg[0]);
if(tag=='=')
{
if(strcmp(arg[0],"end")==0)
{
end(&s);
break;
}
else if(strcmp(arg[0],"insert")==0)
{obj=-1;
if(k==1) tag='I';
else if(k==2) tag='I',set(arg[1],s);
else if(k==6) insert(&s,1);
else if(k==7) if(set(arg[1],s))insert(&s,2);}
else if(strcmp(arg[0],"delete")==0 && k==2) delete(&s);
else if(strcmp(arg[0],"list")==0) list(s);
else if(strcmp(arg[0],"save")==0)
{if(k==2) strcpy(filename,arg[1]);
save(s);}
else if(strcmp(arg[0],"edit")==0 && k==6) edit(&s);
else if(strcmp(arg[0],"load")==0 && k==2) load(&s);
else printf("COMMAND ERROR!\n");
}
else if(tag=='I')
{
if(strcmp(arg[0],"end")==0) tag='=';
else if(strcmp(arg[0],"set")==0 && k==2) set(arg[1],s);
else if(k==5) insert(&s,0);
else printf("COMMAND ERROR!\n");
}
for(i=0;i<k;i++) free(arg);
}
for(i=0;i<k;i++) free(arg);
} |
|