デバッグを行った結果、関数read_dataの最初のfscanf関数でfscanf.cの52行めのstream != NULLというところでエラーが発生しているようです。どこを直せばよいのでしょうか。プログラムが長いので、複数回に分けて投稿します。
コンパイラ Microsoft Visual Studio 2005
OS Windows XP
プログラム
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define ERROR -1
/*構造体定義*/
struct student{
char name[100];
int student_number;
char password[100];
int score[3][5];
};
struct teacher{
char name[100];
int teacher_number;
char password[100];
int subject_id;
};
/*プロトタイプ宣言*/
void ninsho(struct student* data,struct teacher* data1,int b,int* student,int* teacher,int* ninsho);
void student_score(struct student* data,int student_number,int b);
void teacher_score(struct student* data,struct teacher* data1,int teacher_number,int b,int subject,char subject_name[/url]);
void teacher_topx(struct student* data_copy,struct teacher* data1,int teacher_number,int b,int subject,char subject_name[/url]);
void sort(struct student* data,int left,int right,int subject,int b,int jiki);
void teacher_menu(struct student* data,struct teacher* data1,int teacher_number,int b);
void teacher_logout(struct student* data,struct teacher* data1,int teacher_number,int b);
void read_data(struct student* data,struct teacher* data1,int b);
void student_logout(struct student* data,int student_number,int b);
void student_menu(struct student* data,int student_number,int b);
void student_topx(struct student* data_copy,int student_number,int b);
void file_out(struct student* data,int b,int subject,int hyoji,char* subject_name,int* juni,double average_score,double* deviation_score,int jiki);
void entry(struct student* data,struct teacher* data1,int b,int subject,int teachre_number);
int main(void)
{
int b,student_number=1,teacher_number,ninsho1=ERROR;
struct student data[31];
struct teacher data1[3];
b=sizeof(data)/sizeof(data[0]);
read_data(data,data1,b);
/*認証*/
ninsho(data,data1,b,&student_number,&teacher_number,&ninsho1);
if(ninsho1==0){
student_menu(data,student_number,b); /*学生の場合*/
}else if(ninsho1==1){
teacher_menu(data,data1,teacher_number,b);
}
return 0;
}
/*認証関数*/
void ninsho(struct student* data,struct teacher* data1,int b,int* student,int* teacher,int* ninsho){
int i,number;
char dmy[100],name[100],pass[100];
printf("氏名と番号とパスワードを入力してください。\n");
printf("氏名:");
fgets(name,sizeof(name),stdin);
name[strlen(name)-1]='\0';
printf("番号:");
fgets(dmy,sizeof(dmy),stdin);
number=atoi(dmy);
printf("パスワード:");
fgets(pass,sizeof(pass),stdin);
pass[strlen(pass)-1]='\0';
for(i=0;i<b;i++){
if(strcmp(name,data.name)==0&&
number==data.student_number&&
strcmp(pass,data.password)==0){
*ninsho=0;
*student=number;
break;
}
}
if(*ninsho!=0){
for(i=0;i<3;i++){
if(strcmp(name,data1.name)==0&&
number==data1.teacher_number&&
strcmp(pass,data1.password)==0){
*ninsho=1;
*teacher=number;
break;
}
}
}
printf("\n");
if(*ninsho==ERROR){
printf("認証失敗\n\n");
exit(0);
}else{
printf("認証成功\n\n");
}
}