一所大学有多达50000名学生,学校每学期可开设多达2000门课程。一般情况下,每个学生每学期会选其中的1-7门课,学生的选课情况保存于一个文本文件中, 其中,第一行前两个字段为学生学号和姓名字段,跟在后面的是每门课的名称;第二行起, 每一行前两个为具体的学生学号和姓名,跟在后面的是各门课的选课情况(Yes代表选,No代表没选)。上述每个字段之间用若干空格分开。 现在,学校需要获取两份报告:第一份报告是列出每门课程参与学生的姓名,另一份报告是列出每个学生所选的课程。请你编程帮助学校获得这两份报告。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 2000
struct listnodejud{
char coujud[4];
};
struct listnodestu{
char num[15];
char name[15];
struct listnodejud cou_jud[MAX];
struct listnodestu *next;
};
char cou_name[1000][11];
struct listnodecou{
char cou_name[10];
} couname[20];
int counum();
struct listnodestu *creatlist(int i);
void typelist1(struct listnodestu *p,int i);
void typelist2(struct listnodestu *p,int i);
int counum()
{
int i = 0;
char *s;//用来识别有效字符串
FILE fp;
fp=fopen("Course imformation.txt","r");
s=(char)malloc(sizeof(char));
while(1)
{
fscanf(fp,"%s",s);
if(strcmp(s,"Name")!=0&&strcmp(s,"Number")!=0) break;
}
for(i=0;;i++)
{
if(strcmp(s,"end")==0) break;
strcpy(cou_name[i],s);
fscanf(fp,"%s",s);
}
/*while(1)
{
if(strcmp(s,"end")==0) break;
strcpy(couname[i].cou_name,s);
printf("%s\n",couname[i].cou_name);
fscanf(fp,"%s",s);
i++;
// printf("%s\n",couname[i-2].cou_name);
}*/
fclose(fp);
return i;
}
struct listnodestu *creatlist(int i)
{
char s[15];
FILE *fp=fopen("Course imformation.txt","r");
struct listnodestu *head=NULL,tail=NULL;
struct listnodestu p;
while(1)
{
fscanf(fp,"%s",s);
if(strcmp(s,"end")==0) break;
}
p=(struct listnodestu)malloc(sizeof(struct listnodestu));
printf("0");
while(1)
{
fscanf(fp,"%s",s);
if(strcmp(s,"end")==0) break;
printf("0");
strcpy(p->num,s);
fscanf(fp,"%s",p->name);
for(int j=0;j<=i;j++)
{
fscanf(fp,"%s",p->cou_jud[i].coujud);
}
if(head==NULL)
{
head=p;
head->next=NULL;
}
if(tail!=NULL)
{
tail->next=p;
}
tail=p;
tail->next=NULL;
p=(struct listnodestu)malloc(sizeof(struct listnodestu));
}
fclose(fp);
return head;
};
void typelist1(struct listnodestu *p,int i)
{
FILE *fp;
printf("%s",p->name);
fp=fopen("List1.txt","w");
for(int j=0;j<=i;j++)
{
// printf("%s\n",couname[0].cou_name);
fprintf(fp,"%s ",couname[j].cou_name);
if(strcmp(p->cou_jud[j].coujud,"Yes")==0)
{
fprintf(fp,"%s ",p->name);
}
p=p->next;
fprintf(fp,"\n");
}
fclose(fp);
}
void typelist2(struct listnodestu *p,int i)
{
FILE *fp=fopen("List2.txt","W");
while(p!=NULL)
{
fprintf(fp,"%s ",p->name);
for(int j=0;j<=i;j++)
{
if(strcmp(p->cou_jud[j].coujud,"Yes")==0)
{
fprintf(fp,"%s ",couname[j].cou_name);
}
}
p=p->next;
fprintf(fp,"\n");
}
fclose(fp);
}
int main()
{
struct listnodestu *p;
int num;
num=counum();
p=creatlist(num);
printf("%s",p->name);
typelist1(p,num);
// typelist2(p,num);
// printf("%d",num);
return 0;
想知道哪里错了