switch()顺序不符合原意
为什么当我不管输入什么case,程序都要先执行1次default语句?
‘4’是输出不及格学生信息。
#include <stdio.h>
#define N 2
#define M 4
void main()
{ int score[N][M];
char choice='1';
void input(int [][],int,int);
void aver_stu(int [][],int,int);
void aver_cour(int [][],int,int);
void orde_aver(int [][],int,int);
void failed(int [][],int,int);
input(score,N,M);
printf("\n ==========the Score Processing System ====================\n");
printf("1.print each student's average\n");
printf("2.print each course's average\n");
printf("3.Order the students by student's average decreasingly \n");
printf("4.print the failed student \n");
printf("0.Exit the system \n");
printf("===============================================\n");
printf("Please choise (0-4): \n");
while(choice!='0')
{
choice=getchar();
switch(choice)
{case '1':
aver_stu(score,N,M); break;
case '2':
aver_cour(score,N,M); break;
case '3':
orde_aver(score,N,M); break;
case '4':
failed(score,N,M); break;
case '0':
exit(0);
default:
printf("Choice Error,Please select again(0-4):");
}
}
}
void input(int s[N][M],int x,int y)
{
int i,j;
for(i=0;i<x;i++)
for(j=0;j<y-1;j++)
{ printf("student%d course%d score:",i+1,j);
scanf("%d",&s[i][j]);
}
}
void aver_stu(int s[N][M],int x,int y)
{
int i,j,sum;
for(i=0;i<x;i++)
{ for(j=0,sum=0;j<y-1;j++)
sum+=s[i][j];
s[i][j]=sum/3;
printf("%d\n",s[i][j]);
}
}
void aver_cour(int s[N][M],int x,int y)
{
int i,j,sum;
for(j=0;j<y-1;j++)
{for(i=0,sum=0;i<x;i++)
sum+=s[i][j];
printf("%d ",sum/N);
}
printf("\n");
}
void orde_aver(int s[N][M],int x,int y)
{
int i,j,k,t,temp1,temp2,r[N][2];
for(i=0;i<x;i++)
{r[i][0]=i+1; r[i][1]=s[i][y-1];}
for(i=0;i<x-1;i++)
for(k=i+1;k<x;k++)
{if(r[i][1]<r[k][1])
{t=k;
temp1=r[i][0];temp2=r[i][1];
r[i][0]=r[t][0];r[i][1]=r[t][1];
r[t][0]=temp1;r[t][1]=temp2;
}
}
for(j=0;j<N;j++)
printf("%d %d %d\n",j+1,r[j][0],r[j][1]);
}
void failed(int s[N][M],int x,int y)
{
int i,j,k;
for(i=0;i<x;i++)
{
for(j=0,k=1;j<y-1;j++)
if(s[i][j]<60)
{if(k-->0)
printf("student%d ",i+1);
printf("course%d score:%d ",j,s[i][j]);
}
printf("\n");
}
}