| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 479 人关注过本帖
标题:为什么我这个链表没法输入数据呢???百思不得其解
只看楼主 加入收藏
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
结帖率:100%
收藏
已结贴  问题点数:40 回复次数:4 
为什么我这个链表没法输入数据呢???百思不得其解
题目要求是这样的,就是在学生的基本信息里查找和输入的年龄相同的,而我咋建立链表时在输入第一个学生的信息时当输入性别时就提示内存不能为written呢?
一下是我的代码:请大家看一下,给指下错误,有源代码的提供源代码的也行,不过我最大的希望就是您能指出我到底错哪了?这才是我想要的,诚待您的帮助,谢谢!
一下是我的代码:
#include<stdio.h>
#include<stdlib.h>
struct stud
{
        int num;

    char name[20];
    char sex[5];
    int age;
   
    struct stud *next;
}stu[4];
void main()
{
    struct stud *head ,*thisp,*newp,*p,*q;
    head=NULL;/*置空表*/
    int i, aged;
    printf("输入四个学生的信息:\n");/*建立链表*/
    for(i=0;i<4;i++)
    {
        newp=(struct stud *)malloc(sizeof(stu));
        if(head==NULL)
            head=newp;
        else
        {
            thisp=head;
            while(thisp->next!=NULL)
                thisp=thisp->next;
            thisp->next=newp;/*指向新开辟的节点*/
        }
        thisp=newp;
        printf("学号为i+1的学生的信息%d\n",i+1);
                printf("学号:\n");
        scanf("%d",&thisp->num);
        printf("姓名:\n");
        scanf("%s",thisp->name[20]);
        printf("性别:\n");
        scanf("%s",thisp->sex[5]);
        printf("年龄:\n");
        scanf("%d",&thisp->age);
   
        thisp->next=NULL;
    }
    printf("请输入一个要删掉的年龄:\n");
    scanf("%d",&aged);
    p=head;
    while(1)
    {
        if(head->next==NULL)
        {
            printf("没找到");
            break;
        }
        if(aged=head->age)/*删除头结点*/
        {
            head=head->next;
            free(head);
            break;
        }
        q=p;/*q指向删除节点的前一节点*/
        p=p->next;/*指向下一个节点*/
        if(p->age==aged)
        {
            q->next=p->next;
            free(p);
            break;
        }
    }
    while(p!=NULL)
    {
        printf("%4s%5s",p->name,p->sex);
        printf("%3d%4d",p->num,p->age);
        p=p->next;
}




}
搜索更多相关主题的帖子: 链表 百思不得其解 数据 输入 
2010-07-01 10:32
pbreak
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:83
专家分:558
注 册:2007-5-10
收藏
得分:40 
看红色部分的变化:
#include<stdio.h>
#include<stdlib.h>
struct stud
{
        int num;

    char name[20];
    char sex[5];
    int age;
   
    struct stud *next;
}stu[4];
void main()
{
    struct stud *head ,*thisp,*newp,*p,*q;
    head=NULL;/*置空表*/
    int i, aged;
    printf("输入四个学生的信息:\n");/*建立链表*/
    for(i=0;i<4;i++)
    {
        newp=(struct stud *)malloc(sizeof(stu));
        if(head==NULL)
            head=newp;
        else
        {
            thisp=head;
            while(thisp->next!=NULL)
                thisp=thisp->next;
            thisp->next=newp;/*指向新开辟的节点*/
        }
        thisp=newp;
        printf("学号为i+1的学生的信息%d\n",i+1);
                printf("学号:\n");
        scanf("%d",&thisp->num);
        printf("姓名:\n");
        scanf("%s",thisp->name);
        printf("性别:\n");
        scanf("%s",thisp->sex);
        printf("年龄:\n");
        scanf("%d",&thisp->age);
   
        thisp->next=NULL;
    }
    printf("请输入一个要删掉的年龄:\n");
    scanf("%d",&aged);
    p=head;
    while(1)
    {
        if(head->next==NULL)
        {
            printf("没找到");
            break;
        }
        if(aged=head->age)/*删除头结点*/
        {
            head=head->next;
            free(head);
            break;
        }
        q=p;/*q指向删除节点的前一节点*/
        p=p->next;/*指向下一个节点*/
        if(p->age==aged)
        {
            q->next=p->next;
            free(p);
            break;
        }
    }
    while(p!=NULL)
    {
        printf("%4s%5s",p->name,p->sex);
        printf("%3d%4d",p->num,p->age);
        p=p->next;
}




}
2010-07-01 10:46
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
回复 2楼 pbreak
谢谢!这样就可以输入了,不过您能给解释一下为什么吗?为什么要这么改啊
2010-07-01 10:51
pbreak
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:83
专家分:558
注 册:2007-5-10
收藏
得分:0 
scanf("%s",thisp->name);
scanf要求传入一个地址。。
thisp->name代表数组的首地址。。
而thisp->name[20]其实数组越界了,所以会导致致命的错误。。
2010-07-01 10:54
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
回复 4楼 pbreak
哦,知道了,谢谢!现在输入有点问题,又提示内存不能为read,看我自己能不能解决
2010-07-01 10:57
快速回复:为什么我这个链表没法输入数据呢???百思不得其解
数据加载中...
 
   



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

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