这个程序为什么在VC++6.0上运行到读取文件函数时出错了???
#include<stdio.h>/*标准输入输出函数库*/#include<string.h> /*字符串函数库*/
#include<malloc.h>
#define FILE_DATA_PATH "H:\\student.txt"
static int m=0;
struct student
{
long int num;
char name[20];
int age;
char sex;
char birthday[10];
char address[30];
char tel[15];
char E_mail[20];
}stu[100000];
void welcome();/*系统标题函数声名*/
void mainmenu();/*选择框架函数声名*/
void record();/*1.输入学生信息函数声名*/
void displayAll();/*2.显示信息函数声名*/
void display();
void query();/*3.学生信息条件查询函数声名*/
void query_by_num();
void query_by_name();
void readData();//读取文件
void writeData();//写入文件
/*---------------------------------主调函数-------------------------------------*/
void main()
{
char userName[9];
char userPWD[7];
int i;
printf("\n\n\n");
printf("\t\t\t-------☆-【学生信息管理系统】-☆------\n");
printf("\n");
for(i=0; i<3; i++)
{
printf("\n管理员初始用户名和密码均为a\n");
printf("请输入您的用户名:");
scanf("%s", userName);
printf("\n请输入您的密码:");
scanf("%s", userPWD);
if ((strcmp(userName,"a")==0) && (strcmp(userPWD,"a")==0))
{
welcome();
mainmenu();
break;
}
else
{
if (i < 2)
{
printf("用户名或密码错误,请重新输入!");
}
else
{
printf("您已连续3次将用户名或密码输错,系统将退出!\n");
}
}
}
}
/*---------------------------------程序名称-------------------------------*/
void welcome()
{
printf("\n");
printf("\n");
printf(" ---------------------------------------------- \n");
printf(" |||********欢迎进入学生信息管理系统********||| \n");
printf(" ---------------------------------------------- \n");
printf(" ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ \n");
printf("\n");
}
/*------------------------------------主菜单--------------------------------------*/
void mainmenu()
{
int choice=-1;
readData();
do
{
printf("\n 温馨提示:为保证您的操作得到保存,请按正常顺序退出系统\n");
printf(" ┌--------------------------------------------┐ \n");
printf(" │ ★ 欢迎使用学生信息管理系统 ★ │ \n");
printf(" ├--------------------------------------------┤ \n");
printf(" │ 1.输入学生信息 │ \n");
printf(" ├--------------------------------------------┤ \n");
printf(" │ 2.显示学生信息 │ \n");
printf(" ├--------------------------------------------┤ \n");
printf(" │ 3.学生查询信息 │ \n");
printf(" ├--------------------------------------------┤ \n");
printf(" │ 4.删除学生信息 │ \n");
printf(" ├--------------------------------------------┤ \n");
printf(" │ 5.修改学生信息 │ \n");
printf(" ├--------------------------------------------┤ \n");
printf(" │ 0.退出,谢谢使用!!! │ \n");
printf(" └--------------------------------------------┘ \n");
printf("请输入您的选择:");
scanf("%d", &choice);
switch(choice)
{
case 0:
writeData();
return;
case 1:
record();
break;
case 2:
displayAll();
break;
case 3:
query();
break;
case 4:
//del();
break;
case 5:
//change();
break;
default:
printf("\n无效选项!");
break;
}
}
while(choice != 0);
}
/*-----------------------------------输入学生信息-------------------------------------*/
void record()
{
char o;
o='y';
do
{
printf("请输入第%d个学生的信息:\n",m+1);
printf("请输入学生的学号:");
scanf("%d",&stu[m].num);
printf("请输入学生的姓名:");
scanf("%s",stu[m].name);
printf("请输入学生的年龄:");
scanf("%d",&stu[m].age);
do
{
printf("请输入学生的性别,男生输m女生输w:");
scanf("%s",&stu[m].sex);
if(stu[m].sex !='m' &&stu[m].sex !='w')
{
printf("输入错误--请重新输入:\n");
}
}
while(stu[m].sex !='m' &&stu[m].sex !='w');
printf("请输入学生的出生年月:");
scanf("%s",stu[m].birthday);
printf("请输入学生的地址:");
scanf("%s",stu[m].address);
printf("请输入学生的联系方式:");
scanf("%s",stu[m].tel);
printf("请输入学生的E-mail:");
scanf("%s",stu[m].E_mail);
m++;
printf("\n是否继续添加学生信息?是就输入y或Y,不是就输入另外任意字符:\n");
scanf("%s",&o);
}
while(o=='y'||o=='Y');
}
/*---------------------------------显示学生的信息-------------------------------------*/
void display(struct student *p)
{
printf("以下就是您所要查找的学生信息:\n");
printf("-------------------------------------------------------------------------------");
printf("学号\t姓名\t年龄\t性别\t出生年月\t地址\t\t电话\tE-mail\n");
printf("%ld\t%s\t%d\t%c\t%s\t%s\t%s\t%s\n", p->num, p->name, p->age, p->sex, p->birthday, p->address, p->tel, p->E_mail);
}
void displayAll()
{
struct student *p;
printf("以下就是显示的学生信息:\n");
printf("-------------------------------------------------------------------------------");
printf("学号\t姓名\t年龄\t性别\t出生年月\t地址\t\t电话\tE-mail\n");
for(p=stu;p<stu+m;p++)
{
printf("%ld\t%s\t%d\t%c\t%s\t%s\t%s\t%s\n", p->num, p->name, p->age, p->sex, p->birthday, p->address, p->tel, p->E_mail);
}
}
/*---------------------------学生信息条件查询------------------------------------*/
void query()
{
int choice=-1;
do
{
printf("\n");
printf(" ┌--------------------┐ \n");
printf(" │ 1.按学号查询 │ \n");
printf(" ├--------------------┤ \n");
printf(" │ 2.按姓名查询 │ \n");
printf(" ├--------------------┤ \n");
printf(" │ 0.取消 │ \n");
printf(" └--------------------┘ \n");
printf("请输入您的选择:");
scanf("%d", &choice);
switch(choice)
{
case 0:
return;
case 1:
query_by_num();
break;
case 2:
query_by_name();
break;
default:
printf("\n无效选项!");
break;
}
}
while(choice != 0);
}
void query_by_num(struct student *p)
{
int num,j;
do
{
printf("请输入学号进行查询:->>");
scanf("%d",&num);
for(j=0;j<m;j++)
{
if(stu[j].num==num)
{
p=stu+j;
display(p);
break;
}
}
if(stu[j].num!=num)
printf("您输入的学号不存在---:");
break;
}while(stu[j].num!=num);
}
void query_by_name(struct student *p)
{
int j;
char Name[30];
do
{
printf("请输入你所要查询的学生的姓名:>>");
scanf("%s",Name);
for(j=0;j<m;j++)
{
if(strcmp(stu[j].name,Name)==0)//字符串函数
{
p=stu+j;
display(p);
break;
}
}
if(strcmp(stu[j].name,Name)!=0)
printf("您输入的学生姓名不存在。");
break;
}while(strcmp(stu[j].name,Name)!=0);
}
/*---------------------------写入文件------------------------------------*/
void writeData()
{
FILE* fp;//文件指针
struct student *p;
fp=fopen(FILE_DATA_PATH,"w");
if(!fp)
{
printf("文件打开错误!");
return;
}
fprintf(fp,"%d\n",m);
for(p=stu;p<stu+m;p++)
{
fprintf(fp,"%ld\t%s\t%d\t%c\t%s\t%s\t%s\t%s\n", p->num, p->name, p->age, p->sex, p->birthday, p->address, p->tel, p->E_mail);
}
fclose(fp);
}
/*---------------------------读取文件------------------------------------*/
void readData()
{
FILE* fp;//文件指针
struct student *p;
p=(struct student *)malloc(sizeof(struct student));
fp=fopen(FILE_DATA_PATH,"r");
if(!fp)
{
printf("文件打开错误!");
return;
}
fscanf(fp,"%d\n",m);
fscanf(fp,"%ld\t%s\t%d\t%c\t%s\t%s\t%s\t%s\n", &p->num, p->name, &p->age, p->sex, p->birthday, p->address, p->tel, p->E_mail);
fclose(fp);
}