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
不知道你文件里面的内容是怎么样的本回答被提问者采纳

c语言入门代码009 从 txt 文本文件中加载数据到结构体数组
第一步,通过fopen函数以读取模式打开文件,准备从文件头部获取数据。第二步,文件中逐个读取结构体字段,并将数据保存到数组中,直到文件结尾。feof函数用于检测文件是否达到末尾,判断是否需要结束循环。在读取数据时,使用fscanf函数,与scanf相似,但添加了文件指针参数,用于在文件内容中执行读取操作。数据...

C语言 如何把文件里面的内容存到结构体数组里面
需要使用文件操作函数fwrite和fread。读物文件并写入结构体,同时保存文件的代码如下:1、写 FILE* fp = fopen("card.dat", "wb");for(int i = 0; i < counts; i++){fwrite(&card[i], sizeof(struct card), 1, fp);}fclose(fp);2、读 FILE* fp = fopen("card.dat", "rb");in...

c语言怎么用文件保存和读取 结构体数组\/
return -1 ;fwrite( (char*)tw , sizeof(struct test), 3 , fp ); \/\/将数组写入文件 fclose(fp);\/\/以上完成写操作 fp=fopen("struct.dat" , "rb" );if ( fp == NULL )return -1 ;fread( (char*)tr , sizeof(struct test), 3 , fp ); \/\/从文件中读三个结构体的数据,也...

C++如何读入一个文件中的结构体数组数据?
file.read(&t, sizeof(t));2 如果文件中,是以文本方式存储的可读的结构体数据:需要根据文件中数据的存储格式,通过fscanf(C语言风格)或ifstream的>>成员函数,读取各个值到对应的结构体成员变量中。如 struct test t;fscanf(fp, "%d",&t.a);或 file>>t.a;...

c语言实现读取txt文件数据存入结构数组中 求大神看看我的代码有什么问题...
智能小程序[最佳答案]根据txt文件中数据的格式,可以用fscanf把数据读取到数组中。 下面以一种最基本的情况为例,给出参考代码。 假定结构体格式为 struct test{ int...

C语言从TXT中读取存入结构体数组中遇到问题?i和plist->一开始初始化都...
这是读了4组数据。txt文件里面,最后有空行或空字符(空格 回车换行 TAB)。

如何将txt文件中的学生信息读取到结构体数组中,C语言
FILE *fp;printf("请输入文件名,路径:"); \/\/打开txt文件scanf("%s",filename);if((fp = fopen(filename,"r")) == NULL) {fprintf(stderr,"%s 文件打开失败!\\n",filename);exit(0); } for(int i=0; i<12; i++) \/\/循环读取{ fscanf(fp,"%s%s%f",StuInfo[i].I...

C语言中把文件里面的几组数据依次读出来分别赋值给几个结构体变量(用链...
feof(),用这个函数判断是否读到文件尾了。fread(buf,size,count,fp);\/\/buf输入数据起始地址,size 每个数据块的大小,count 每次写入的数据块个数,fp 文件指针 写好后是:while(!feof(fp)){ fread(&temp[i],sizeof(struct use),1,fp);\/\/这个读出来放数组里面 i++;} 问题是你读的是txt...

C++ 怎样从TXT文件中读取数据存到结构体数组中
infile(inputFile.c_str()); \/\/infile按照指定路径读取txt文件 for(index = 0; index < NO_OF_PERSON; index++)\/\/读取txt文件至struct { infile>>addressTypeList[index].personAddress;infile>>addressTypeList[index].personCity;infile>>addressTypeList[index].personState;infile>>addressType...

C 语言,文件操作将结构体数组用fwrite写入文件后,打开时为什么文件中...
fwrite(&s[i],sizeof(stu),1,fp);你这样是以二进制的形式将stu结构写入文件的。typedef struct{char name[20];int score[M];double avg;}stu;应该用fprintf函数分三次完成一个记录的输出:fprintf(fp,"%s\\t", s[i].name);int j; \/\/在前面补充定义for(j=0;j < M;j++) fprintf(fp,...

相似回答