| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 474 人关注过本帖
标题:关于链表的数据录入与读取,麻烦高手帮我看一下
只看楼主 加入收藏
coki
Rank: 1
等 级:新手上路
帖 子:9
专家分:7
注 册:2010-11-30
结帖率:100%
收藏
 问题点数:0 回复次数:2 
关于链表的数据录入与读取,麻烦高手帮我看一下
关于一个用链表的学生管理系统,要求从文本录入数据,我已经将数据录入,但为什么读取的时候我只能读取第一条或者最后一条数据,中间的数据读取不到?烦请高手大虾帮忙看看,谢啦!
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct class_//成绩结构体
{
        char no2[10];   
        char no1[5];
        char name1[10];
        float score_;
        float score[3];
        struct class_*next1;
}pp;
typedef struct student//学生基本信息
{
    char no[10];
    char name[20];
    char sex[5];
    char num[5];
    char tel[15];
   
    struct student *next;
}STU;
void xinxia()//A.txt信息的录入
{
    FILE *fp;
    STU *p1,*h=NULL,*p2;
    p1=(STU*)malloc(sizeof(STU));
    h=p1;
    p2=p1;
    fp=fopen("A.txt","r");
    if(!fp)
    {
        printf("文件打开失败!\n");
        exit(1);
    }
    while(!feof(fp))//从文件中读数据直到文件尾
    {   
        p2->next=p1;
        if(!fscanf(fp,"%s    %s    %s    %s    %s",p1->no,p1->name,p1->sex,p1->num,p1->tel))
        {
            printf("文件读取不成功\n");
            exit(1);
        }               
        printf("%s    %s    %s    %s    %s\n",p1->no,p1->name,p1->sex,p1->num,p1->tel);
        p1=(STU*)malloc(sizeof(STU));//头结点盛申请内存
    }
    p2->next=NULL;
    p1=h;
    p2=h;
    while(p1!=NULL)//这里,对所输出的数据进行测试!
    {
        printf("%s    %s    %s    %s    %s\n",p1->no,p1->name,p1->sex,p1->num,p1->tel);   
        p2=p1;
        p1=p2->next;
   
    }
}
void xinxib()//B.txt信息录入
{
    FILE *fp2;
    pp *q1,*q2=NULL,*h1;
   
    fp2=fopen("B.txt","r");
        if(!fp2)
        {
            printf("文件打开失败");
            exit(1);
        }

        q1=(pp*)malloc(sizeof(pp));
        h1=q1;
        q2=q1;
        while(!feof(fp2))
        {            
            q2->next1=q1;
            if(!fscanf(fp2,"%s    %s    %s    %f    %f    %f    %f\n ",q1->no2,q1->no1,q1->name1,&q1->score_,&q1->score[0],&q1->score[1],&q1->score[2]))
            {
                printf("文件读取失败\n");
                exit(1);
            }   
            printf("%s    %s    %s    %f    %f    %f    %f\n",q1->no2,q1->no1,q1->name1,q1->score_,q1->score[0],q1->score[1],q1->score[2]);
            q1=(pp*)malloc(sizeof(pp));
        }

[ 本帖最后由 coki 于 2011-2-23 09:10 编辑 ]
搜索更多相关主题的帖子: include 管理系统 结构体 信息 
2011-02-23 09:05
韩明海
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:253
专家分:749
注 册:2010-4-3
收藏
得分:0 
void xinxia()//A.txt信息的录入
{
    FILE *fp;
    STU *p1,*h=NULL,*p2;
    p1=(STU*)malloc(sizeof(STU));
    h=p1;
    p2=p1;
    fp=fopen("A.txt","r");
    if(!fp)
    {
        printf("文件打开失败!\n");
        exit(1);
    }
    while(!feof(fp))//从文件中读数据直到文件尾
    {   p2=p1
        if(!fscanf(fp,"%s    %s    %s    %s    %s",p1->no,p1->name,p1->sex,p1->num,p1->tel))
        {
            printf("文件读取不成功\n");
            exit(1);
        }               
        printf("%s    %s    %s    %s    %s\n",p1->no,p1->name,p1->sex,p1->num,p1->tel);
        p1=(STU*)malloc(sizeof(STU));//头结点盛申请内存
        p2->next=p1;
    }
    p2->next=NULL;
    p1=h;
    while(p1!=NULL)//这里,对所输入链表的数据进行测试!
    {
        printf("%s    %s    %s    %s    %s\n",p1->no,p1->name,p1->sex,p1->num,p1->tel);   
        p1=p1->next;
   
    }
}
没有测试,感觉你对链表的创建不是很清楚,p2->next=p1,你虽然做了这个操作,但是没有移动p2,p2就一直在头上,所以你的链表一直就只有头结点一个节点
2011-02-23 10:01
mofeel
Rank: 2
等 级:论坛游民
帖 子:20
专家分:26
注 册:2009-10-22
收藏
得分:0 
在void xinxia()函数中,
while(!feof(fp))//从文件中读数据直到文件尾 中,做如下的变化
     p2=p1;
        if(!fscanf(fp,"%s    %s    %s    %s    %s",p1->no,p1->name,p1->sex,p1->num,p1->tel))
        {
            printf("文件读取不成功\n");
            exit(1);
        }               
 //       printf("%s    %s    %s    %s    %s\n",p1->no,p1->name,p1->sex,p1->num,p1->tel);
        p1=(STU*)malloc(sizeof(STU));//头结点盛申请内存
        p2->next = p1;
2011-02-23 10:38
快速回复:关于链表的数据录入与读取,麻烦高手帮我看一下
数据加载中...
 
   



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

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