回 帖 发 新 帖 刷新版面

主题:请高手看看错误的原因【急】

代码如下:
#include <stdio.h>
#include <stdlib.h>

typedef struct student 
{
    long stuid;
    char name[10];
    long phoneNo;
    struct student *next; 
}LStu,*Stulist;

//建立一个学生信息
Stulist creatStu()
{
    Stulist s;
    s = (Stulist)malloc ( sizeof(LStu) );
    if(!s)
    {
        printf("存储分配失败!\n");
        exit(0);
    }
    printf("请输入学生的学号:\n");
    scanf("%ld",&(s->stuid));
    printf("请输入学生的姓名:\n");
    scanf("%s",s->name);
    printf("请输入学生的电话号码:\n");
    scanf("%ld",&(s->phoneNo));
    
//    printf("%s\n",s->name);
//    printf("%ld\n",s->phoneNo);
//    printf("%ld\n",s->stuid);

    return s;
}

//初始化链表
void initList(Stulist *L)

    Stulist s;
    (*L) = NULL;
    s = (Stulist)malloc ( sizeof(LStu) );
    s->next = (*L);
    (*L) = s;
    printf("链表已创建...\n");
}

//创建链表
void createList(Stulist *L)
{
    int i = 1;
    int j = 1;
    initList(L);
    printf("现在需要添加学生信息吗?(1.是/0.否)\n");
    scanf("%d",&i);
    while(i)
    {
        insertElement((*L),j);
        j++;
        printf("继续吗?(1.是/0.否)\n");    
        scanf("%d",&i);
    }
}

//向链表中插入元素
int insertElement(Stulist L,int i)
{
    Stulist p,s;
    int j = 0;
    p = L;
    s = creatStu();
    while (p && j < i-1) 
    { 
        p = p->next;  
        ++j; 
    }
    if(!p||j>i-1)
    {
        printf("插入位置有错!\n");
        return 0;
    }
    s->next = p->next;
    p->next = s;
    return 1;    
}

//输出指定元素信息
void printInfor(Stulist L,int i)

    Stulist s = NULL;
    s = getElementAt(L,i);
    if(!s) return;
    printf("学号:%ld",s->stuid);
    printf(",姓名:%s",s->name);
    printf(",电话:%ld\n",s->phoneNo);
}

//获得指定位置的元素
Stulist getElementAt(Stulist L,int i)
{////////////////////////////////////////////////报告说这句有错
    Stulist p = NULL;
    int j = 1;
    p = L->next;
    while (p && j<i)  
    { 
        p = p->next;  
        ++j;  
    }
    if(!p||j>i)
    {
        printf("所给位置有错!\n");
        return NULL;
    }
/*    printf("学号:%ld",p->stuid);
    printf(",姓名:%s",p->name);
    printf(",电话:%ld\n",p->phoneNo);*/
    return p;
}

//主函数
void main()
{
    int i = 1,location;
    Stulist L;
    while(i)
    { 
        printf("请选择:\n");
        printf("1.建立链表  2.删除元素  3.插入元素  4.输出元素 5.显示全部  0.退出\n");
        scanf("%d",&i);
        switch(i)
        { 
           case 1:  createList(&L);
                    break;
           case 2: 
                   break;
           case 3: 
                   break;
           case 4: printf("请输入要输出元素的位置.\n");
                   scanf("%d",&location);
                   getElementAt(L,location);
                   break;
           case 5: break;
        }
    }
}

错误信息:
c:\documents and settings\owner\桌面\program\数据结构\错误\error1.c(99) : error C2040: 'getElementAt' : 'struct student *(struct student *,int )' differs in levels of indirection from 'int ()'
c:\documents and settings\owner\桌面\program\数据结构\错误\error1.c(90) : warning C4047: '=' : 'struct student *' differs in levels of indirection from 'int '

回复列表 (共5个回复)

沙发

参数不一样。

在主函数里,
定义一个链表指针。
然后把头指针传入函数。


    DATAWABPTR startPtr=NULL;
    DATAWABPTR tempPtr;
    FILE *fileWab;

while(menu!='6'){

        switch(menu){

            case '1':
                printWab(startPtr);
                getch();
                break;
            case '2':
                while(controlWab()){
                    printf("\n查找姓名:\n#>");
                    scanf("%s",seekName);
                    seekWab(startPtr,seekName);
                }
                break;
            case '3':
                while(controlWab()){

板凳

不知道你是在什么环境下出的错误,但是根据你的出错信息应该是在输出链表元素的时候,但是我使用GCC跑你的程序没有任何问题。而且源码显示你使用指针是正确的,至少我这么认为!要是还是有错,希望你能提供进一步的细节信息,包括编译器和你的测试数据集,以及你的调试步骤。

3 楼


谢谢你能看我的程序,我的编译环境是Microsoft Visual C++

4 楼

我使用VS6.0测试了上边的程序,也可以正常运行啊!

5 楼


晕,那我这个VC++ 6.0怎么报有错

我来回复

您尚未登录,请登录后再回复。点此登录或注册