标题:要编写一个输入学生学号、姓名、性别的程序,并以‘#’结束输入,然后输入学 ...
只看楼主
剑侠
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2017-5-13
结帖率:100%
已结贴  问题点数:20 回复次数:3 
要编写一个输入学生学号、姓名、性别的程序,并以‘#’结束输入,然后输入学号删除该学号同学,要求使用单链表,求大神帮忙看看我的程序错在哪里?
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
typedef char datatype;
struct student{
    char num[10];
    char name[10];
    char sex[5];
};
typedef struct node{
    struct student data;
    struct node *next;
}linklist;
linklist *head;
linklist *creat(){
    linklist *head,*r,*l;
    head=NULL;
    r=NULL;
    while(1){
        char ch;
        l=(linklist*)malloc(sizeof(linklist));
        scanf("%s%s%s",l->data.num,l->data.name,l->data.sex);
        scanf("%c",ch);
        if('ch'=='#')break;
        if(head==NULL)head=l;
        else r->next=l;
        r=l;
    }
    if(r=NULL)r->next=NULL;
    return head;
}
linklist *dele(linklist*head){
    linklist *p,*s;
    p=head;
    s=(linklist*)malloc(sizeof(linklist));
    scanf("%s",s->data.num);
    while(p->next->data.num!=s->data.num){
        p->next=p->next->next;
        if(p->next=NULL)break;
    }
    if(p->next=NULL)printf("该学生不存在");
    p->next=p->next->next;
    return head;
}
linklist *print(linklist*head){
    linklist *p;
    p=head;
    while(p!=NULL){
        printf("%s%s%s",p->data.num,p->data.name,p->data.sex);
    }
}
int main(){
    linklist *l,*k;
    l=creat();
    k=dele(l);
    print(k);
}
搜索更多相关主题的帖子: include 姓名 
2017-05-13 18:14
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
得分:5 
头指针是局部建立的,无法返回给调用单位,你要考虑使用全局变量的head, 其他我没细看,如果还有返回指针的函数都要遵循这一点。
2017-05-13 21:58
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
得分:15 
增加和修改了你的部分代码, 还是跟着你的思路写的。删除只完成了单个删除,重复数据的删除自己考虑

程序代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
typedef char datatype;    //定义多余的别名

struct student {
    char num[10];
    char name[10];
    char sex[5];
};

typedef struct node {
    struct student data;
    struct node *next;
}linklist;

linklist *head;            //多余全局head

linklist *creat() {
    linklist *head, *r, *l;        //局部head
    head = NULL;
    r = NULL;
    while (1) {
        char ch;
        l = (linklist*)malloc(sizeof(linklist));
        printf("Please input nun    name    sex\n");
        scanf("%s %s %s", l->data.num, l->data.name, l->data.sex);
        fflush(stdin);          //清空输入流残留的内容
        if (head == NULL)head = l;
        else r->next = l;
        r = l;
        printf("\ndata added successed, input '#' to end \n\n");
        scanf("%c", &ch);           //语法错误
        fflush(stdin);
        if (ch == '#')
        break;

    }
    r->next = NULL;
    return head;
}

linklist *dele(linklist*head) {
    linklist *p, *s, *pd;
    p = head;
    s = (linklist*)malloc(sizeof(linklist));
    printf("\nPlease input you want delete data num\n");
    scanf("%s", s->data.num);
    while (p != NULL) {         //字符串比较语法错误,链表和数组结构体没理解清楚
        if(strcmp(p->data.num, s->data.num) == 0)
            if(p == head)
            {
                free(p);
                head = p->next;
                printf("\nDelete successed\n");
                break;
            }
            else
            {
                pd->next = p->next;
                free(p);
                printf("\nDelete successed\n");
                break;
            }
        pd = p;
        p = p->next;
    }
    if(p == NULL)
    printf("\nNot found num\n");
    return head;
}

void print(linklist*head) {                //输出后没必要返回head 指针了  不用定义指针函数
    linklist *p;
    p = head;
    while (p != NULL) {
        printf("%s %s %s\n", p->data.num, p->data.name, p->data.sex);
        p = p->next;        //少了这一句,链表不指向下一个地址
        printf("\n");
    }
}
int main() {
    linklist *l, *k;
    l = creat();
    k = dele(l);
    print(k);
}
2017-05-17 10:38
剑侠
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2017-5-13
得分:0 
回复 3楼 Emotiona
谢谢指点
2017-05-19 16:52



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-476976-1-1.html




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

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