c语言结构体指针与函数的问题

kukucall 2017-03-19 11:03:44
#include<stdio.h>
#include<stdlib.h>
#include"ClassInfo.h"
int readtext(FILE *fp,CLASSINFOINFILE *classinfohead,CLASSSCORE *classscore)
{
fscanf(fp,"%d%s%d",(*classinfohead).Class.nClassNO),(*classinfohead).Class.szClassName,&(*(classinfohead).Class.nStudentNumber));
*(classinfohead).nStudentInfoOffset=544;
*(classscore).nCount=0;
STUDENTINFO *m;
m=*(classscore).pStudents;
while(fscanf(fp,"%s%s%lf%lf%lf",*(*(classscore).pStudents).szID,*(*(classscore).pStudents)..szName,&(*(*(classscore).pStudents).darrScores[0]),&(*(*(classscore).pStudents).darrScores[1]),&(*(*(classscore).pStudents).darrScores[2]))==5)
{
*(classscore).pStudents++;
*(classscore).nCount++;
}
*(classscore).pStudents=m;
return *(classscore).nCount;

}
void main()
{
int i=0;
FILE *fp;
if((fp=fopen("DataForLab3.txt","r+"))==NULL)
printf("error!\n");
CLASSINFOINFILE *Class,Class1;
Class=&Class1;
CLASSSCORE *Stu,Stu1;
STUDENTINFO Stu2[20];
Stu1.pStudents=Stu2;
Stu=&Stu1;
readtext(fp,&Class1,&Stu1);
}
头文件里的
typedef struct ClassInfo{
int nClassNO;//班级代码
char szClassName[20];//班级名称
int nStudentNumber;//学生人数
}CLASSINFO;

//班级信息二进制文件(学号_姓名_Lab9.dat)的文件头结构
typedef struct ClassInfoInFile{
CLASSINFO Class;//班级信息
int nStudentInfoOffset;//学生信息存储位置相对于文件起始位置的偏移量 >0
char carrPreserved[512];//预留512字节,用于扩展
}CLASSINFOINFILE;

//学生信息结构体类型
typedef struct StudentInfo{
char szID[9]; //以\0结尾的学号
char szName[21];//以\0结尾的姓名
double darrScores[3];//某三门课的成绩
}STUDENTINFO;

//结构体数组类型
typedef struct ClassScore
{
STUDENTINFO *pStudents; //学生信息结构体首地址
int nCount;//学生人数(数组元素个数)
} CLASSSCORE;
...全文
142 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2017-03-20
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<stdlib.h>

typedef struct ClassInfo{
    int nClassNO;
    char szClassName[20];
    int nStudentNumber;
}CLASSINFO;

typedef struct ClassInfoInFile{
    CLASSINFO Class;
    int nStudentInfoOffset;
    char carrPreserved[512];
}CLASSINFOINFILE;

typedef struct StudentInfo{
    char szID[9];
    char szName[21];
    double darrScores[3];
}STUDENTINFO;

typedef struct ClassScore
{
    STUDENTINFO *pStudents;
    int nCount;
} CLASSSCORE;

int readtext(FILE *fp, CLASSINFOINFILE *classinfohead, CLASSSCORE *classscore)
{
    STUDENTINFO *m;

    fscanf(fp,"%d%s%d", &classinfohead->Class.nClassNO, (*classinfohead).Class.szClassName, &(classinfohead->Class.nStudentNumber));
    classinfohead->nStudentInfoOffset = 544;
    classscore->nCount = 0;

    m = classscore->pStudents;
    while(fscanf(fp, "%s %s %lf %lf %lf\n", m->szID, m->szName,
                    &m->darrScores[0], &m->darrScores[1], &m->darrScores[2]) == 5) {
        m++;
        classscore->nCount++;
    }

    return (*(classscore)).nCount;

}
int main()
{
    FILE *fp;
    CLASSINFOINFILE *Class, Class1;
    CLASSSCORE *Stu, Stu1;

    if(!(fp=fopen("DataForLab3.txt", "r+"))) {
        printf("open error!\n");
        exit(-1);
    }
    Class = &Class1;
    STUDENTINFO Stu2[20];
    Stu1.pStudents = Stu2;
    Stu = &Stu1;
    readtext(fp, &Class1, &Stu1);

    return 0;
}
以上是我改过的,你可以尝试一下; 对于你读文件的方式我感觉还是会有问题,主要看你的文件内容的格式了。 程序编译有很多警告和错误;指针和变量运用的还不是很熟;

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧