| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 368 人关注过本帖
标题:请教前辈一个链表的问题
只看楼主 加入收藏
heboqian
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2009-7-22
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
请教前辈一个链表的问题
请教前辈,为什么在提示完“please input the record which you want to insert:”接收数据的时候当我刚输入完age的值的时候一敲回车就
自动退出了,我还有一个数组mark[3]没赋值呢。
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

#define LEN sizeof(struct student)

struct student
{
    char name[30];
    long number;
    char gender;
    int age;
    float mark[3];
    struct student *next;
};

int record = 0;

struct student *listinsert(struct student *head);

int main(void)
{
    struct student *head;
    head = initlist();
    head = listinsert(head);
    getch();
    return 0;
}

struct student *initlist(void)
{
    struct student *head;
    head = NULL;
    return head;
}

struct student *listinsert(struct student *head)
{
    struct student *p1, *p2, *pi;
    p1 = p2 = head;
    printf("please input the record which you want to insert:\n");
    pi = (struct student *)malloc(LEN);
    scanf("%s %ld %c %d",&pi->name,&pi->number,&pi->gender,&pi->age);
    printf("please input the score:\n");
    scanf("%f %f %f",&pi->mark[0],&pi->mark[1],&pi->mark[2]);
    if(p1 == NULL)
    {
        head = pi;
        pi->next = NULL;
        record++;
        goto end;
    }
    if(pi->number <= head->number)
    {
        pi->next = head;
        head = pi;
        record++;
        goto end;
    }
    while((pi->number > p1->number) && (p1->next != NULL))
    {
        p2 = p1;
        p1 = p1->next;
    }
    if(pi->number <= p1->number)
    {
        if(p1->next == NULL)
        {
            p1->next = pi;
            pi->next = NULL;
            record++;
        }
        else
        {
            p2->next = pi;
            pi->next = p1;
            record++;
        }
    }
    else
    {
        p1->next = pi;
        pi->next = NULL;
        record++;
    }
end:
        printf("end!\n");
    return head;
}
搜索更多相关主题的帖子: 链表 前辈 
2009-07-27 14:45
godbless
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:216
专家分:950
注 册:2009-7-24
收藏
得分:20 
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

#define LEN sizeof(struct student)

struct student
{
    char name[30];
    long number;
    char gender;
    int age;
    float mark[3];
    struct student *next;
};

int record = 0;

struct student *listinsert(struct student *head);
struct student *initlist(void);                        //做个声明.

int main(void)
{
    struct student *head;
    head = initlist();
    head = listinsert(head);
    getch();
    return 0;
}

struct student *initlist(void)
{
    struct student *head;
    head = NULL;
    return head;
}

struct student *listinsert(struct student *head)
{
    struct student *p1, *p2, *pi;
    p1 = p2 = head;
    printf("please input the record which you want to insert:\n");
    pi = (struct student *)malloc(LEN);
    scanf("%s %ld %c %d",pi->name,&pi->number,&pi->gender,&pi->age);



   //上句&pi->name改为 pi->name,数组名本身就是地址...
   


    printf("please input the score:\n");
    scanf("%f %f %f",&pi->mark[0],&pi->mark[1],&pi->mark[2]);
    if(p1 == NULL)
    {
        head = pi;
        pi->next = NULL;
        record++;
        goto end;
    }
    if(pi->number <= head->number)
    {
        pi->next = head;
        head = pi;
        record++;
        goto end;
    }
    while((pi->number > p1->number) && (p1->next != NULL))
    {
        p2 = p1;
        p1 = p1->next;
    }
    if(pi->number <= p1->number)
    {
        if(p1->next == NULL)
        {
            p1->next = pi;
            pi->next = NULL;
            record++;
        }
        else
        {
            p2->next = pi;
            pi->next = p1;
            record++;
        }
    }
    else
    {
        p1->next = pi;
        pi->next = NULL;
        record++;
    }
end:
        printf("end!\n");
    return head;
}


给你一个建议, 最好不要用goto语句, 忘了goto吧....
2009-07-27 16:10
heboqian
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2009-7-22
收藏
得分:0 
回复 2楼 godbless
多谢前辈指导,可是问题还是没有解决,这个程序在编译的时候没有错误,错误出现在运行过程中
2009-07-27 16:36
godbless
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:216
专家分:950
注 册:2009-7-24
收藏
得分:0 
回复 3楼 heboqian
你运行的时候有什么问题?
2009-07-27 16:40
heboqian
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2009-7-22
收藏
得分:0 
回复 4楼 godbless
在提示完“please input the record which you want to insert:”接收数据的时候,没等把数据都输入完,就退出了。
比如:
开始运行程序。。。
屏幕提示:please input the record which you want to insert:
依次输入:
xiaoming 回车
1001 回车
m 回车
25 回车
就在我输入完25后一敲回车就退出了,但是我后面还有三个数据(mark[3])要输入呢。
2009-07-27 17:13
godbless
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:216
专家分:950
注 册:2009-7-24
收藏
得分:0 
我用GCC 好像没有问题.
建议你输入这种组合数据把它分成多个输入语句会好点.
2009-07-27 17:18
heboqian
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2009-7-22
收藏
得分:0 
回复 6楼 godbless
我试过了用GCC没问题,可能是我的win-tc编译器出了问题,多谢前辈了
2009-07-27 18:00
快速回复:请教前辈一个链表的问题
数据加载中...
 
   



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

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