题目大概是:输入学生学号(字符串)和成绩,要求用菜单选择输出1、成绩排名2、学生优良统计3、最高最低分人数,各分数段人数,4、清屏,5、退出
刚学 自己打了一些,不加文本输入输出编译通过,加了就不会了。。。
#include <stdio.h>
#define n 3
char a[n][10];
int b[n],k,i;
int pm(),yl(),tj(),quit(),clr();
void process();
int *options[]={(int*) pm,(int*)yl,(int*)tj,(int*)clr,(int*)quit};
void main()
{
int l;
FILE *fp;
fp=fopen("input.txt", "r");
for(i=0;i<n;)
{printf("Please input the student's number:\n");
fscanf(fp,"%s",a[i]);
printf("Please input the student's score:\n");
fscanf("%d",&b[i]);
if(b[i]>100 || b[i]<0)
continue;
i++;
}
k=strlen(a[0])-1;
for(;;) {
l=menu();
process(options[l]);
getch();
}}
int menu()
{
char ch;
do{
printf("\n");
printf("1.Ranking\n");
printf("2.Check and evaluate\n");
printf("3.Statistics\n");
printf("4.Clrscr\n");
printf("5,Quit\n");
printf("Please select a number:");
ch=getche();
printf("\n\n");
}
while(!strchr("12345",ch));
return(ch-49);
}
void process(p)
int(*p)();
{
(*p)( );
}
pm()
{
char c[10],d[n][10];
int e[n],j,s;
for(i=0;i<n;i++)
{strcpy(d[i],a[i]);
e[i]=b[i];}
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
{
if(e[j]>e[j+1])
{ s=e[j]; e[j]=e[j+1]; e[j+1]=s;
strcpy(c,d[j]); strcpy(d[j],d[j+1]); strcpy(d[j+1],c);} }
printf("Number");
for(j=0;j<(k+2);j++){printf(" ");} printf("Score\n");
for(i=0;i<n;i++)
{ printf("%s",d[i]); for(j=0;(j<k+8);j++){printf(" ");} printf("%d\n",e[i]);}
return 0;}
yl()
{
int s;
for(i=0;i<n;i++)
{
s=b[i]/10;
switch(s)
{
case 10: printf("No.%s,Perfect,%d\n",a[i],b[i]);break;
case 9: printf("No.%s,Perfect,%d\n",a[i],b[i]);break;
case 8: printf("No.%s,Well,%d\n",a[i],b[i]); break;
case 7: printf("No.%s,middle,%d\n",a[i],b[i]); break;
case 6: printf("No.%s,Pass,%d\n",a[i],b[i]); break;
default: printf("No.%s,Not Pass,%d\n",a[i],b[i]);break;
}}return 0;}
tj(){
char m1[10],m2[10];
int max=0,min=101,sum=0;
float average;
int s,r=0,w=0,x=0,y=0,z=0;
for(i=0;i<=n;i++)
{
s=b[i]/10;
switch(s)
{ case 10:w=w+1; break;
case 9:w=w+1; break;
case 8:x=x+1; break;
case 7:y=y+1; break;
case 6:z=z+1; break;
default:r=r+1; break;
} }
for(i=0;i<n;i++)
{ if(b[i]>max)
{
max=b[i];
strcpy(m1,a[i]);
}
if (b[i]<min)
{
min=b[i];
strcpy(m2,a[i]);
}
sum=sum+b[i];
}
average=sum/n;
printf("Not Pass=%d\nPass=%d\nMiddle=%d\nWell=%d\nPerfect=%d\n",r,z,y,x,w);
printf("average=%5.2f\nmax=%d,No.%s\nmin=%d,No.%s\n",average,max,m1,min,m2);
return 0; }
clr()
{
clrscr();return 0;}
quit()
{exit(0);return 0;}
求完善。。。
? ? ? ? ? ? ? ?
{
int l;
FILE *fp;
fp=fopen("input.txt", "r");
for(i=0;i<n;)
{printf("Please input the student's number:\n");
fscanf(fp,"%s",a[i]);
printf("Please input the student's score:\n");
fscanf("%d",&b[i]);
if(b[i]>100 || b[i]<0)
continue;
i++;
} ? ? ? ? ? 开头输入部分。还有输出部分。
就是把文本和这个程序结合一起不会。。
就是把文本和这个程序结合一起不会。。
追答fp=fopen("input.txt", "r");
你这个input.txt存不存在?里面有没有内容?不存在是无法编译的。。。你加一句
if(fp==NULL)
{printf("The file is not exit!!!");
return 0
}