蹊跷的C语言问题

来源:百度知道 编辑:UC知道 时间:2024/09/28 12:14:38
#define N 5
void input(char *name,double *score)
{
int i;
for(i=0;i<N;i++)
scanf("%c",&name[i]);
}

main()
{
char name[N],ch,k;
double score[N],t;
int i,j,low,high,mid;
clrscr();
input(name,score);
for(i=0;i<N-1;i++)
for(j=i+1;j<N;j++)
if(score[i]>score[j])
{t=score[i];score[i]=score[j];score[j]=t;
ch=name[i];name[i]=name[j];name[j]=ch;}
for(i=0;i<N;i++)
printf("%c,%lf\n",name[i],score[i]);
printf("plase input the name...\n");
/*scanf("%c",&k);
for(i=0;i<N;i++)
if(name[i]==k)printf("%lf\n",score[i]);

while(low<high)
{
mid=(low+high)/2;
if(score[mid]==k)printf("%c\n",name[mid]);
if(k>score[mid])low=mid+1;
else high=mid-1;
}*/
return;
}
这个是我编的程序,我注释的部分不需要看,就是在开始的input函数,为什么我N是5,但是在程序运行的时候它只给我输入3个数,少了2个啊?

程序无错,疑似输入格式有误

由于是字符格式,请勿用回车作分隔符,应在一行之内输入所需数据,再以回车结束,如此可确保程序正确运行。

究其原因,只因回车亦为字符,故会将其计算在内,因此,前二行已有四字符,取第三行首字符后既会退出循环。

因为你输入时是以空格或回车间隔的,程序将这俩个字符付给了name,你可以尝试在scanf("%c",&name[i]); 前加上fflush(stdin);应该就没问题了