函数包括两部分,第一部分为名为jianli.h的头文件,用于定义结构体数组和手动输入信息建立文件,代码如下:
#include<stdio.h>
#define max 100
typedef struct student
{
char no[13];
char name[10];
char sex[4];
}student,stu[max]; //学生结构体
void jianli(int n) //函数用于输入结构体节点
{
int i,a,b;FILE * pf;
if((pf=fopen("D:\\a.dat","a+"))==NULL) return ;
stu s,c;
for(i=0;i<n;i++)
{
printf("\n请输入学号:");
fflush(stdin);
scanf("%s",&s[i].no);
fflush(stdin);
printf("\n请输入姓名:");
scanf("%s",&s[i].name);
fflush(stdin);
printf("\n请输入性别:");
scanf("%s",&s[i].sex );
}
//for(i=0;i<2;i++)
//{
// printf("\n学号:%-12s",s[i].no);
// printf("\n姓名:%-10s",s[i].name);
// printf("\n性别:%-2s",s[i].sex);
//} // 打印输出内容用于对比文件的输出结果
for(i=0;i<3;i++)
{
fwrite(&s[i],sizeof(student),1,pf);
}
fclose(pf);
}
第二部分为主函数,打开文本文件读取结构体数组用于其他用途,代码如下:
#include<stdio.h>
#include"jianli.h"
void main()
{
FILE * pf;stu s;
int n,i;
if((pf=(fopen("D:\\a.dat","a+")))==0)return ;
printf("请输入学生数:");
scanf("%d",&n);
jianli(n);
for (i=0;i<2;i++)
{
fread(&s[i],sizeof(student),1,pf);
printf("%s%s%s",s[i].no,s[i].name,s[i].sex);
}
}
以上程序中容易出现的错误包括:
1、多个scanf函数并列时,为防止出现空格键被读取保存为输入值,需要在输入前加入fflush(stdin)清除缓冲;
2、结构体内的单个数组设立存储空间时应大于最大需求存储空间,如学号为12位时,字符数组应设为13,输出字符串时系统以字符串结束符号‘0\’停止读取,若空间刚好时,没有空间存放结束符,导致输出时出现错误,错将结构体后一部分内容输出。