33,311
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
int main()
{
int i=0,aver,n=0,count=0,sum=0;
int xh[100],sg[100], ch;
printf("输入一批(不超过100人)学生的学号与身高:\n");
printf("(操作:学号+空格+身高(CM);按下两次回车键结束输入操作)\n");
while(1){
scanf("%d%d",&xh[i],&sg[i]);
sum+=sg[i++];
n++;
getchar();
printf("Continue ? (Y/N)or (y/n): ");
ch = getchar();
if (ch == 'N' || ch == 'n' )
break;
}
if(n>0)
aver=sum/n;
else
aver=0;
printf("身高超过平均身高或身高超过170cm的学生信息\n");
printf("学号 身高\n");
while(i!=0) {
if(sg[--i]>aver||sg[i]>170)
{
printf("%4d%4d\n",xh[i],sg[i]);
count++;
}
}
printf("身高超过平均身高%dcm或超过170cm的学生人数是%d人\n",aver,count);
return 0;
}
原因是2个:
scanf();输入之后需要回车才能将输入的数据从输入缓存里刷到内存里,所以回车是必须的,但是输入回车后,换行符(回车)会残留在输入缓存里,所以第一个getchar()就会接收这个回车(换行符)
第二个getchar();就会接收一个字符,那么你再输入第二个学生信息时就会吸收一个字符;
个人稍微改了一下,通过输入Y或N来决定是否继续;
if(getchar()=='\n')
if(getchar()=='\n')
break;}
输入2个数字后要换行
结果进来IF,吃掉一个回车