| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1143 人关注过本帖
标题:[求助]学数据结构写了个小程序,但是怎么都调不过,求解
只看楼主 加入收藏
阿萨德179
Rank: 1
等 级:新手上路
帖 子:15
专家分:4
注 册:2013-10-10
结帖率:100%
收藏
已结贴  问题点数:5 回复次数:23 
[求助]学数据结构写了个小程序,但是怎么都调不过,求解
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct Student{
    int id;
    int age;
    char name[20];
    int grade;
    char sex;
    int index;
    struct Student * sNext;
}stu,*pstu;
void init(pstu pHead,pstu pTail);
void input(pstu pHead,pstu pTail);

void traverse(pstu pHead);



int main(){
    stu sHead;
    stu sTail;
   
    init(&sHead,&sTail);
    input(&sHead,&sTail);
    traverse(&sHead);//一到这个遍历函数,程序就挂了,求解?
    return 0;
}
//构造头结点
void init(pstu pHead,pstu pTail){
    pHead=(pstu)malloc(sizeof(stu));
    pTail=pHead;
    pHead->index=0;
    pHead->sNext=NULL;
}

//添加
void input(pstu pHead,pstu pTail){
    pstu  p=(pstu)malloc(sizeof(stu));
    printf("请输入姓名:");
    scanf("%s",p->name);
    printf("请输入学号:");
    scanf("%d",&p->id);
    printf("请输入年龄:");
    scanf("%d",&p->age);
    printf("请输入成绩:");
    scanf("%d",&p->grade);

    p->index=pTail->index+1;
    pTail->sNext=p;
    pTail=p;
    pTail->sNext=NULL;
   
}
//遍历
void traverse(pstu pHead){
    if(pHead==NULL){
        printf("你还没有存储任何学生信息!!");
        return;
    }
    pstu p;
    p=pHead->sNext;

    while(p!=NULL){
        printf("编号:%d||姓名:%s||学号:%d||年龄:%d||成绩:%d",
            p->index,p->name,p->id,p->age,p->grade);
        p=p->sNext;
    }
    return;
}
搜索更多相关主题的帖子: return include 
2013-10-10 11:22
阿萨德179
Rank: 1
等 级:新手上路
帖 子:15
专家分:4
注 册:2013-10-10
收藏
得分:0 
先自顶一个
2013-10-10 11:24
heroinearth
Rank: 10Rank: 10Rank: 10
来 自:云南曲靖
等 级:青峰侠
帖 子:430
专家分:1506
注 册:2011-10-24
收藏
得分:0 
void traverse()函数的返回值为void,就不用return;只用个return;本身就有问题
2013-10-10 11:38
xufan
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:232
专家分:804
注 册:2008-10-20
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct Student{
    int id;
    int age;
    char name[20];
    int grade;
    char sex;
    int index;
    struct Student * sNext;
}stu;
stu* init();
stu* input(stu* sHead);

void traverse(stu* sHead);



int main(){
   
    stu sTail;

    stu *sHead = init();

    traverse(input(sHead));//一到这个遍历函数,程序就挂了,求解?

    return 0;
}
//构造头结点
stu* init(){
    stu* pHead=(stu*)malloc(sizeof(stu));
    pHead->index=0;
    pHead->sNext=NULL;

    return pHead;
}

//添加
stu* input(stu* pHead){
    stu* pTail = pHead;
    stu*  p=(stu*)malloc(sizeof(stu));
    printf("请输入姓名:");
    scanf("%s",p->name);
    printf("请输入学号:");
    scanf("%d",&p->id);
    printf("请输入年龄:");
    scanf("%d",&p->age);
    printf("请输入成绩:");
    scanf("%d",&p->grade);

    p->index=pTail->index+1;
    p->sNext = NULL;
    pTail->sNext=p;
    pTail=p;
   
    return pHead;

}
//遍历
void traverse(stu* pHead){
    if(pHead==NULL){
        printf("你还没有存储任何学生信息!!");
        return;
    }
    stu* p;
    p=pHead->sNext;

    printf("编号\t姓名\t学号\t年龄\t成绩\t\n");
    while(p!=NULL){
        printf("%d\t%s\t%d\t%d\t%d",
            p->index,p->name,p->id,p->age,p->grade);
        p=p->sNext;
    }

    return;
}

~~~~~~我的明天我知道~~~。
2013-10-10 12:07
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
回复 3楼 heroinearth
void不用return ;用什么?

总有那身价贱的人给作业贴回复完整的代码
2013-10-10 12:31
阿萨德179
Rank: 1
等 级:新手上路
帖 子:15
专家分:4
注 册:2013-10-10
收藏
得分:0 
回复 4楼 xufan
如果是要输入多个学生信息的话,就不能将尾节点放在添加的函数中去了吧,就是这样我才决定用一个头结点和一个尾节点进行传参的,而且我个人觉得话既然已经用指针来传参就没必要在返回值了
2013-10-10 12:33
阿萨德179
Rank: 1
等 级:新手上路
帖 子:15
专家分:4
注 册:2013-10-10
收藏
得分:0 
回复 3楼 heroinearth
可以用return,并没有返回值,也可以不用,用的话会很明白的就知道函数结束了,显得程序比较清晰
2013-10-10 12:35
zhaogay
Rank: 7Rank: 7Rank: 7
来 自:宫
等 级:黑侠
帖 子:151
专家分:586
注 册:2013-10-10
收藏
得分:0 
LZ值传递可以再看看

好好学习,天天想上
2013-10-10 13:31
qunxingw
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:24
帖 子:1676
专家分:7295
注 册:2011-6-30
收藏
得分:0 
楼主代码只改以下稍改,当然还需要补充循环添加一系列结点。
void init(pstu pHead,pstu pTail){
    pHead=(pstu)malloc(sizeof(stu));
    pTail=pHead;
    //pHead->index=0;////////////////////////////
    pHead->sNext=NULL;
}


void input(pstu pHead,pstu pTail){
    pstu  p=(pstu)malloc(sizeof(stu));
   
    printf("请输入姓名:");
    scanf("%s",p->name);
    printf("请输入学号:");
    scanf("%d",&p->id);
    printf("请输入年龄:");
    scanf("%d",&p->age);
    printf("请输入成绩:");
    scanf("%d",&p->grade);
    pTail=pHead;///////////链表要有头结点联系起来。
    p->index=1;///////////
    pTail->sNext=p;
    pTail=p;
    pTail->sNext=NULL;
   
}

www.qunxingw.wang
2013-10-10 13:31
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
以下是引用heroinearth在2013-10-10 11:38:04的发言:

void traverse()函数的返回值为void,就不用return;只用个return;本身就有问题


return 没有问题的,别误导人家。

只是如果是在最后一行,这个return没有必要而已。

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-10-10 13:45
快速回复:[求助]学数据结构写了个小程序,但是怎么都调不过,求解
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017791 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved