按什么规律??从小到大???
如果是的话,你的循环有问题,如果输入一个比上面存在的数还要大,那你放哪里?
顺便说两句,使用数组是要注意下标是从0开始,多看看基础知识先,。。。汗!
修改以后:
#include<stdio.h>
#include<conio.h>
#define N 20
void main()
{
int str[N]={1,3,5,8,9,10,15};
/*这里从s[7]开始后面的s[]都是0,这点明白吧?*/
int s,j,k;
scanf("%d",&s);
for(j=0;j<N;j++)
{
if(s<str[j]&&j<7)/*在存在的数中寻找*/
{
for(k=N-2;k>=j;k--)/*这里你的为N-1,会造成str[k+1]下标过界,应该改为N-2*/
{
str[k+1]=str[k];
}
str[j]=s;/*这句你的放错地方了,不应该放for里面,虽然问题不大*/
break;/*做完了也就不必要再循环了,跳出*/
}
else if(j>=7) /*都没有找到,表明你输入的数最大,那就放在后面得了*/
{
str[j]=s;
break;/*做完了,跳出,这句跟上面那句不同,一定要,否则后面所有的s[]都是s了*/
}
}
for(j=0;j<N;j++)
{
/* if(str[j]!=0)*/ /*这句加上以后就不会输出后面的0了*/
printf("%3d",str[j]);/*这里要为s[j],不是s[N],后面还会输出一些0,注意加上上面那句就可以解决*/
}
printf("\n");
getch();
}