デバッグを行った結果、関数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"); } }