这个怎么怎么都插不进去,哪里有问题?

#include
main()
{
int a[10]={3,6,9,11,14,16,18,23,26};
int i,temp;
for(i=0;i<=9;i++){
printf("%d ",a[i]);}
printf("\n");
printf("Please input a integer data");
scanf("%d",&temp);
for(i=8;i>=0;i--)
{
if(temp<a[i]){
a[i]=a[i+1];}
else{
temp=a[i+1];
break;}
}
for(i=0;i<=9;i++)
printf("%d ",a[i]);
printf("\n");
}

我跑了一下,发现了你的问题,错的是代码的逻辑上。楼主是否对于赋值

    a[i]=a[i+1]

    a[i+1]=a[i]

有点混淆?问题出在这段代码:

    for(i=8;i>=0;i--)
    {
        if(temp<a[i]){
            a[i]=a[i+1];}
        else{
            temp=a[i+1];
        break;}
    }

逻辑应该是,你将输入的数与数组中的每个数进行大小比较,而且是从后往前。当比较的数比你输入的数大时,你应该把这个数往后移一位,就是

    a[i+1]=a[i]

这句代码的意思就是将a[i]上的值赋给a[i+1]上,“=”是从右赋值向左的。
当比较到的数比你输入的数小时,此时下一位就是你要放的位置,而那个位置已经从之前的操作中空出来了。就正确了。
修改代码如下:


#include<iostream>
void main()
{
    int a[10]={3,6,9,11,14,16,18,23,26};
    int i,temp;
    for(i=0;i<=9;i++){
        printf("%d ",a[i]);}
    printf("\n");
    printf("Please input a integer data");
    scanf("%d",&temp);
    for(i=8;i>=0;i--)
    {
        if(temp<a[i]){
            //a[i]=a[i+1];
            a[i+1] = a[i];
        }
        else{
            //temp=a[i+1];
            a[i+1] = temp;
            break;}
    }
    for(i=0;i<=9;i++)
        printf("%d ",a[i]);
    printf("\n");
}