#include<stdio.h>
int main()
{
int a[20],i,n,x,k;
printf("请输入一组顺序数(从小到大的顺序):");
for(i=0;getchar()!='\n';i++)
scanf("%d",&a[i]);
n=i; //n表示数组内数字的个数
printf("请输入需要插入的数:");
scanf("%d",&x);
for(i=0;i<n;i++)
if(x<a[i])
{
for(k=n-1;k>=i;k--)
a[k+1]=a[k];
a[i]=x;
break;
}
else a[n]=x;
for(i=0;i<=n;i++)
printf("%d ",a[i]);
printf("\n");
}
我是想自己输入数字,用空格分开,系统自己算出数字个数,在进行插入排序,但是总是输不出结果,我觉得问题是出在什么“输入缓冲区”里,有哪位高手可以指点一下吗?急需,谢谢!
你好,我还是不太理解为什么先检查是否输入回车和先赋值会有这么大的不同,能详细解释一下吗?
追答对于for循环,for( 表达式1; 表达式2; 表达式3 )
第一次循环前执行表达式1;每次循环前都执行表达式2;然后执行大括号里的内容。每次执行完大括号里的后,都要执行表达式3.
考虑你实际的输入情况,for开始后,如果你打算输入三个数:1 2 3.
那么你的按键是这样的: 1 空格 2 空格 3 回车
那么for循环里就应该这样执行的:
i为0==》scanf("%d",&a[0]); ==》getchar()是空格不是'\n',继续进入下一个循环==》依次类推
加入是你写的这样:
for(i=0;getchar()!='\n';i++)
{
scanf("%d",&a[i]);
}
那么,根据上面for循环的执行规则,程序先执行getchar()等待你输入,但是你第一个输入的是1,往后的全乱套了。