char变量的话,b=0时,b--等于255),这样b>=0永远都成立。
还有,你的if(a==20&&b==0)这个语句后面加了分号,语句本身就没有什么意义了,只相当于一个空的语句,应该要加大括号。
本人将功能重现,代码如下:(解决了你的源代码中无法正常循环运行的问题)
#include<stdio.h>
#define N 4 //人数
#define KMS 3 //科目数
struct student
{
char name[20]
float score[3]//score[0]语文,score[1]数学,score[2]历史
float ave
}stu[N]
void input(student p[],int n)
{
int i
for(i=0i<ni++)
{
scanf("%s%f%f%f",p[i].name,&p[i].score[0],&p[i].score[1],&p[i].score[2])
}
}
void perave(student p[],int n)
{
int i
for(i=0i<ni++)
p[i].ave=(p[i].score[0]+p[i].score[1]+p[i].score[2])/3.0
}
void ehsbave(float p[],student q[],int n)//main()中p[]用于存储单科均分p[KMS]
{
int i,j
for(i=0i<KMSi++)
{
p[i]=0
for(j=0j<nj++)
p[i]+=q[j].score[i]
p[i]/=n
}
}
void search(student p[],int n,int *l1,int *l2)
{
int r,c
*l1=0*l2=0
for(r=0r<nr++)
for(c=0c<KMSc++)
if(p[*l1].score[*l2]<p[r].score[c])
{
*l1=r
*l2=c
}
}
main()
{
float a[KMS]
int r,c,i,*p_r,*p_c
char subject[KMS][20]={"语文","数学","历史"},pd='y'
p_r=&rp_c=&c
for(pd=='y')
{
printf("输入%d名学生的姓名,语文,数学,历史成绩\n",N)
input(stu,N)
perave(stu,N)
ehsbave(a,stu,N)
search(stu,N,p_r,p_c)
printf("姓名\t平均成绩\n")
for(i=0i<Ni++)
printf("%s\t%.2f\n",stu[i].name,stu[i].ave)
printf("科目\t平均成绩\n")
for(i=0i<KMSi++)
printf("%s\t%.2f\n",subject[i],a[i])
printf("单科最高:\n姓名\t科目\t分数\n%s\t%s\t%.2f\n",stu[r].name,subject[c],stu[r].score[c])
printf("是否继续(y/n)?\n")
getchar()
pd=getchar()
}
}
例如:
#include<stdio.h>
intmain(void)
{
charc
c=getchar()
while(c!='')//输入空格退出
{
printf("%c",c)//这里改成你需要的那个函数做相应的工作就可以了
c=getchar()
}
return0
}
扩展资料
C语言循环控制语句
#include<stdio.h>
intmain(){
inta
/*forloopexecution*/
for(a=10a<20a=a+1)
{
printf("valueofa:%d\n",a)
}
return0
}
C编程语言中do...while循环的语法是-
do{
statement(s)
}while(condition)