LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 743|回复: 0

求助,GCC编译时出现问题,急急急

[复制链接]
发表于 2009-5-13 19:18:27 | 显示全部楼层 |阅读模式
出现错误
[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);
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表