| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1787 人关注过本帖
标题:学生成绩管理系统
只看楼主 加入收藏
蒹葭1
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2020-4-8
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:1 
学生成绩管理系统
源.c (11.85 KB)
(源代码)
以下是发现出问题的部分
void ReadFromFile(char *fileName,struct StuLink * head)    //从数据文件中逐行读取学生信息生成学生链表
{
    int i=1;
    FILE *fp;
    struct StuLink *p1,*p2=NULL;
                               //文件指针变量fp
    if((fp=fopen(fileName,"r"))==NULL)
    {
        printf("不能打开该文件!\n");
        exit(0);
    }
    if((p1=(struct StuLink *)malloc(sizeof(struct StuLink)))==NULL)
    {
        printf("不能成功分配内存储块!");
        exit(0);
    }
    p1->next =NULL;
    while((fscanf(fp,"%s %d %d",p1->xm,p1->xb,p1->cj))!=EOF )
    {
        p1->xh=i;
        if(i==1)head=p1;
        else p2->next=p1;
        p2=p1;
        if((p1=(struct StuLink *)malloc(sizeof(struct StuLink)))==NULL)
        {
            printf("不能成功分配内存储块!");
            exit(0);
        }
        p1->next =NULL;
        i++;
    }                 
    printf("成功生成链表!");
}
不明白为什么在把文件里的内容放到链表里的时候会出现问题,循环只能进行一边,请大家指教!
目前调试初期 如果大佬发现源代码中其他问题,望得到指点可以改正
搜索更多相关主题的帖子: exit 学生 struct printf NULL 
2020-05-28 18:28
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10537
专家分:42927
注 册:2014-5-20
收藏
得分:20 
没有具体数据,模拟一下。
#include <stdio.h>
#include <stdlib.h>

struct StuLink
{
    char xm[10];
    int xb;
    int cj;
    struct StuLink* next;
};

struct StuLink* ReadFromFile(char *fileName)
{
    FILE *fp = fopen(fileName,"r");
    if (fp == NULL)
        return NULL;
    struct StuLink st;
    struct StuLink* head = NULL;
    struct StuLink **p = &head;
    while (fscanf(fp,"%s %d %d",st.xm,&st.xb,&st.cj) == 3)
    {
        *p = (struct StuLink*)malloc(sizeof(struct StuLink));
        if (*p == NULL)
            break;
        *(*p) = st;
        (*p)->next = NULL;
        p = &((*p)->next);
     }
     fclose(fp);
     return head;
}

int SaveToFile(struct StuLink* p, char* filename)
{
    FILE* fp=fopen(filename,"w");
    if (fp==NULL)
        return 0;
    for (; p; p=p->next)
        fprintf(fp, "%s %d %d\n", p->xm,p->xb,p->cj);
    fclose(fp);
    return 1;
}

void PrintList(struct StuLink* p)
{
    for (; p; p=p->next)
        printf("%s %d %d\n", p->xm,p->xb,p->cj);
}

void Free(struct StuLink* head)
{
    struct StuLink* p=head;
    while (p)
    {
        head = p->next;
        free(p);
        p = head;
    }
}

int main(void)
{
    struct StuLink st[3]={{"aaa",1,11,&st[1]},{"bbb",0,22,&st[2]},{"ccc",1,33,NULL}};
    SaveToFile(&st[0], "test.txt");
    struct StuLink* head = ReadFromFile("test.txt");
    PrintList(head);
    Free(head);
    return 0;
}

[此贴子已经被作者于2020-5-29 09:25编辑过]

2020-05-29 09:22
快速回复:学生成绩管理系统
数据加载中...
 
   



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

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