为什么输入56结果就错误了呀 救 这个要怎么改啊😭

#include<stdio.h>
int main()
{
    int arr[9]={11,22,33,44,55,66,77,88,99};
    
    printf("输入一个数字:\n");
    
    int x,t,i;
    scanf("%d",&x);
    
    if(x<=arr[0]){
        t=0;
                
    }else if(x>=arr[8]){
        t=9;
        
    }else{    
        for(i=0;i<9;i++){
            if (x>=arr[i]&&x<=arr[i+1]){
                t=i+1;
                break;
            }
        }    
    }
    for(i=8;i>=t;i--){
        arr[i+1]=arr[i];
        arr[t]=x;
    }
    printf("插入数字后:\n");
    for(i=0;i<10;i++){
        
        printf("%d ",arr[i]);    
    }
    
    return 0;
}

img

根据你提供的代码,问题出现在插入数字的位置计算上。
首先,在for循环中比较时,应该将判断条件改为i<8,因为i+1最大为8,否则会出现数组越界的情况。其次,在插入数字时,应该先将原数组后面的数字依次往后移动一个位置,再将x插入t的位置。例如,当输入56时,应该插入到arr[4]的位置,此时t的值为4。因此,需要将arr[5]-arr[8]的数字全部向后移动一位,再将56赋值给arr[4]即可。

修改后的代码如下所示:

#include<stdio.h>
int main()
{
    int arr[9]={11,22,33,44,55,66,77,88,99};
    
    printf("输入一个数字:\n");
    
    int x,t,i;
    scanf("%d",&x);
    
    if(x<=arr[0]){
        t=0;
                
    }else if(x>=arr[8]){
        t=9;
        
    }else{    
        for(i=0;i<8;i++){  // 修改条件为i<8
            if (x>=arr[i]&&x<=arr[i+1]){
                t=i+1;
                break;
            }
        }    
    }
    for(i=8;i>=t;i--){
        arr[i+1]=arr[i];  // 后面的数字全部向后移动一位
    }
    arr[t]=x;  // 将x插入到t的位置
    printf("插入数字后:\n");
    for(i=0;i<10;i++){
        
        printf("%d ",arr[i]);    
    }
    
    return 0;
}

输入56后的输出结果为:

输入一个数字:
56
插入数字后:
11 22 33 44 56 55 66 77 88 99 

数组长度不够,这个改为 int arr[10]={11,22,33,44,55,66,77,88,99};

img

int arr[9]={11,22,33,44,55,66,77,88,99};
你的数组长度太小了
int arr[10]={11,22,33,44,55,66,77,88,99, 0};