免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2723 | 回复: 7
打印 上一主题 下一主题

[C] 往事具备,只欠东风 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-26 16:55 |只看该作者 |倒序浏览
5可用积分
#include"stdlib.h"
#include"stdio.h"
char name0[15];
typedef struct student{
        int no;
        int age;
        char * name;
        char sex;
        struct student *next;
} studenttype;
typedef studenttype * pstudenttype;
pstudenttype top;
void main(){
        studenttype students;
    students.name=name0;
        int m;
        FILE * file1;//录入文件
        FILE * file2;//新文件
        if((file1=fopen("d:\stu.txt","w+"))==NULL){
                printf("can not open file1");
            exit(0);
        }
        if((file2=fopen("d:\stul.txt","w"))==NULL){
                printf("can not open file2");
                exit(0);
        }
        printf("请输入录入学生数:");
        scanf("%d",&m);
        int i=1;//录入
        while(i<=m){
                printf("请输入学生序号、年龄、性别、姓名:\n");
                scanf("%d %d %c %s",&(students.no),&(students.age),&(students.sex),students.name);  
                fprintf(file1,"%d%d%c%s",students.no,students.age,students.sex,students.name);
                i++;
        }
    top=NULL;//创建链表
        for(i=1;i<=m;i++){
       pstudenttype p;
           p=(pstudenttype)malloc(sizeof(studenttype));
           fscanf(file1,"%d%d%c%s",&(p->no),&(p->age),&(p->sex),p->name);
           p->next=top;
           top=p;
           }
  pstudenttype p,p0,r,r0,q;//排序
    p0=NULL;
        p=top;
        while(p!=NULL){
                r=top;
                while((r->age<p->age)&&(r!=p)){
                        r0=r;
                        r=r->next;
                }
                if(r!=p){
                        q=p;
                        p0->next=p->next;
                        p=p0;
                        if(r==top){
                                q->next=top;
                                top=q;
                        }else{
                                q->next=r;
                                r0->next=q;
                        }
                }
                p0=p;
                p=p->next;
        }
        pstudenttype pp=top;//将链表中数据转入文件
        while(pp!=NULL){
                fprintf(file2,"%d%d%c%s",pp->no,pp->age,pp->sex,pp->name);
                pp=pp->next;
        }*/
}
不知为什么链表中数据无法转入文件中,我怀疑是上一步就没将文件file1中的数据正确的读入到链表中,但不知怎么改。帮帮忙!谢谢!

论坛徽章:
0
2 [报告]
发表于 2008-08-26 17:19 |只看该作者
pstudenttype p;
           p=(pstudenttype)malloc(sizeof(studenttype));
           fscanf(file1,"%d%d%c%s",&(p->no),&(p->age),&(p->sex),p->name);

在这里没有给p->name分配内存,一定会报内存错误

论坛徽章:
4
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11IT运维版块每日发帖之星
日期:2016-08-11 06:20:00IT运维版块每日发帖之星
日期:2016-08-15 06:20:00
3 [报告]
发表于 2008-08-26 17:24 |只看该作者
原帖由 5毛党党员 于 2008-8-26 17:19 发表
pstudenttype p;
           p=(pstudenttype)malloc(sizeof(studenttype));
           fscanf(file1,"%d%d%c%s",&(p->no),&(p->age),&(p->sex),p->name);

在这里没有给p->name分配内存,一定会报内存错误


的确是这个问题,定义结构体时,直接把name定义成字符串数组好了。
比如:char name[16];

论坛徽章:
0
4 [报告]
发表于 2008-08-26 22:13 |只看该作者

回复 #3 happy_fish100 的帖子

前面的students.name=name0没起到分配内存的作用吗?
这是一道题,题目要求结构体中必须是char *name,没办法

论坛徽章:
4
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11IT运维版块每日发帖之星
日期:2016-08-11 06:20:00IT运维版块每日发帖之星
日期:2016-08-15 06:20:00
5 [报告]
发表于 2008-08-27 09:25 |只看该作者
原帖由 火星人1 于 2008-8-26 22:13 发表
前面的students.name=name0没起到分配内存的作用吗?
这是一道题,题目要求结构体中必须是char *name,没办法



因为你为结构体重新分配的内存,结构体中的name指针也需要分配内存。例如:
p=(pstudenttype)malloc(sizeof(studenttype));
p->name = (char *)malloc(sizeof(char) * 16);
fscanf(file1,"%d%d%c%s",&(p->no),&(p->age),&(p->sex),p->name);

如果把name定位为数组,如char name[16],就不需要为name动态分配内存了,这样比较方便。

这样应该就可以了

论坛徽章:
0
6 [报告]
发表于 2008-08-27 09:52 |只看该作者

回复 #1 火星人1 的帖子

这样的问题   还是自己慢慢调试吧,,,

论坛徽章:
0
7 [报告]
发表于 2008-08-27 15:01 |只看该作者
貌似不是name0的问题。我试了一下。至少在name是char*上没有报错。楼主慢慢调试吧

论坛徽章:
0
8 [报告]
发表于 2008-08-27 15:40 |只看该作者
-@- 明显是name 指向不对
           p=(pstudenttype)malloc(sizeof(studenttype));
           fscanf(file1,"%d%d%c%s",&(p->no),&(p->age),&(p->sex),p->name);
这个name ...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP