C语言,文件读取到结构体数组

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#define S 100//最大学生人数
#define C 10 //最大学院数
int stu;//实际学生数量
int col;//实际学院数量
struct STUDENTINFO
{
int ID,sex_temp,college_temp;
char name[20],sex,college[20];
float score[10],ave,sum;
}Student[S+1];//结构体数组
struct SEX
{
int num;
char sex;
}Sex[2];
struct COLLEGE
{
int num;
char college[20];
}College[C];
void _Load()
{
int i,a,j=0;
FILE *fp1,*fp2,*fp3;
if(!(fp1=fopen("CodeInfo.txt","r")))//读取学院信息
{
printf("找不到文件CodeInfo.txt");
exit(0);
}
for(col=0;;col++)
{
if(fscanf(fp1,"%d%s",&College[col].num,College[col].college)==EOF)break;
}
fclose(fp1);
if(!(fp2=fopen("SexInfo.txt","r")))//读取性别信息
{
printf("找不到文件SexInfo.txt");
exit(0);
}
i=0;
while(1)
{
if(fscanf(fp2,"%d%s",&Sex[i].num,&Sex[i].sex)==EOF)break;
i++;
}
fclose(fp2);
if(!(fp3=fopen("StudentInfo.txt","r")))//读取学生信息
{
printf("找不到文件StudentInfo.txt");
exit(0);
}
a=0;
while(1)
{
Student[stu].sum=0;
if(fscanf(fp3,"%d%s%d%d",&Student[stu].ID,Student[stu].name,&Student[stu].sex_temp,&Student[stu].college_temp)==EOF)break;
for(i=0;i<2;i++)
if(Student[stu].sex_temp==Sex[i].num)
Student[stu].sex=Sex[i].sex;
for(i=0;i<col;i++)
if(Student[stu].college_temp==College[i].num)
strcpy(Student[stu].college,College[i].college);
for(i=0;i<10;i++)
{
fscanf(fp3,"%f",&Student[stu].score[i]);
Student[stu].sum+=Student[stu].score[i];
}
Student[stu].ave=Student[stu].sum/10;
a++;
}
fclose(fp3);
}
请问为什么最后print出来都是空的?


/* 
参考代码如下:
"stuInfo.txt"文件中是一些学生的姓名、宿舍号、学号. 
定义一个学生结构体,其中成员包括学号(char num[10])、姓名(name)、宿舍号(dormNum)。 
1.从文件中读取数据,存放到结构体数组中; 
2.输出结构体数组中所有学生的信息. 
*/  
#include <iostream>  
#include <fstream>  
#include <string>  
using namespace std;  
  
const int N = 200;  
  
struct Student  
{  
    char num[10];  
    string name;  
    int dormNum;  
};  
int main()  
{  
    int i = 0, stuNum = 0;  
    //定义结构体数组  
    Student stu[N];  
  
    ifstream infile("stuInfo.txt",ios::in);  
    //测试文件是否成功打开  
    if(!infile)  
    {  
        cerr << "open error!" << endl;  
        exit(1);  
    }  
    while(!infile.eof())  
    {  
        infile >> stu[i].name >> stu[i].dormNum >> stu[i].num;  
        i++;  
        stuNum++;  
    }  
    infile.close(); //关闭文件  
  
    cout << "姓名" << "\t" << "学号" << "\t" << "\t" << "宿舍号" << endl;  
    for(i = 0; i < stuNum; i++)  
    {  
        cout << stu[i].name << "\t" << stu[i].num << "\t" << stu[i].dormNum << endl;  
    }  
  
    return 0;  
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-01-11
如果文件数据是你写入的,写入的格式要和读出的格式一只,也就是说,如果你写的时候是整个结构体写进去的,那么读出来的时候也要是整个结构体读取出来,如果是一个个结构体成员写进去的,那么读取出来也要一只,另外,如果是整个结构体写进去的,并且结构体还包含其他结构体成员,那么读取出来是会为空的,结构体中没有其他结构体和类,就不会空了。追问

你有qq吗,我代码发给你看看

本回答被网友采纳
第2个回答  2015-01-11
读取与写入格式要完全一致。
第3个回答  2015-01-11
不知道你文件里面的内容是怎么样的本回答被提问者采纳
相似回答