什么';这个C程序有什么问题;s总是出现一个我们没有输入的新数字?用Dev-C++;

什么';这个C程序有什么问题;s总是出现一个我们没有输入的新数字?用Dev-C++;,c,dev-c++,C,Dev C++,此程序用于将数字从最小值排序到最大值 当我输入5137968204 结果是01234345678 9消失,出现了另一个我们没有输入的3。 当我输入9988776655443322110 结果是031112234455667788 99消失,出现了一个我们没有输入的3。怎么了 #include<stdio.h> void sort(int b[]){ for(int i = 0;i<10;i++){ for(int j = 0;j<10-i;j++

此程序用于将数字从最小值排序到最大值 当我输入
5137968204

结果是
01234345678

9
消失,出现了另一个我们没有输入的
3

当我输入
9988776655443322110

结果是
031112234455667788

99
消失,出现了一个我们没有输入的
3
。怎么了

#include<stdio.h>

void sort(int b[]){
    for(int i = 0;i<10;i++){
        for(int j = 0;j<10-i;j++){
            if(b[j+1]<b[j]){
                int temp = 0;
                temp = b[j+1];
                b[j+1] = b[j];
                b[j] = temp;
            }
        }
    }   
}

void main(){
    int a[10];
    printf("please enter numbers you want to sort:\n");
    for(int i = 0;i<10;i++){
        scanf("%d",&a[i]);
    }
    printf("The number you have input were:");
    for(int i=0;i<10;i++){
        printf("%d ",a[i]);
    }
    sort(a);
    printf("The sorted numbers are:");
    for(int i=0;i<10;i++){
        printf("%d ",a[i]);
    }
}
#包括
无效排序(int b[]){

for(int i=0;i在某些情况下,
b[j+1]
将被计算为
j=9
(这发生在
i
为0时),因此您将访问数组边界之外的元素


您所做的程序行为未定义。(您观察到的“新元素”可能是由于您通过越界访问引入的)。

在某些情况下,
b[j+1]
将针对
j=9
(当
i
为0时发生这种情况)因此,您将访问数组边界之外的元素


你所做的程序行为是未定义的。(你观察到的“新元素”可能是由于你通过越界访问引入了它。)

这里有一些未定义的行为:
b[j+1]
对于
j=9
你在越界访问的事件(实际上
b[10]
是数组中
b
的第11个元素,但它只包含10个元素)


当你有这样的行为时,会发生完全不可预测的事情。它可能会起作用。它可能会产生垃圾值(就像它为你做的那样)。在另一次尝试中,你的程序可能会因segfault而崩溃。

你这里有一些未定义的行为:
b[j+1]
对于
j=9
你在边界之外访问的事件(实际上是
b[10]
,它是
b
的第11个元素,但它只包含10个元素)


当你有这样的行为时,将会发生的事情是完全不可预测的。它可能会工作。它可能会产生垃圾值(就像它为你做的那样)。在另一次尝试中,你的程序可能会因segfault而崩溃。

只需删除-i中的for(int j=0;j只需删除-i中的for(int j=0;js已解决。按反向/正向顺序排序数字。
#包括
无效排序(int b[]){
内部温度=0;
对于(int i=0;已隔离。按反向/正向顺序对数字进行排序。
#包括
无效排序(int b[]){
内部温度=0;

对于(int i=0;值得注意的是,如果OP再次尝试,可能会发生很多事情,包括程序只是通过segfault.Yup退出。编译器还保留吃掉你的猫的权利。编译器不会做任何有趣的事情,它甚至不会检测到。不过,操作系统可能会决定吃掉你的猫:值得注意的是,如果OP再试一次,可能会发生很多事情,包括程序只是通过segfault.Yup退出。编译器也保留吃掉你的猫的权利。编译器不会做任何有趣的事情,甚至不会检测到。不过,操作系统可能只是决定吃掉你的猫:p
#include<stdio.h>

void sort(int b[]){
    for(int i = 0;i<10;i++){
        for(int j = 0;j<10-i;j++){
            if(b[j+1]<b[j]){
                int temp = 0;
                temp = b[j+1];
                b[j+1] = b[j];
                b[j] = temp;
            }
        }
    }   
}
#include<stdio.h>

void sort(int b[]){
    for(int i = 0;i<10;i++){
        for(int j = 0;j<9;j++){ //just remove the i because it is useless. 
                                //change the maximum iteration to 10 to prevent out of bounds exception
            if(b[j+1]<b[j]){
                int temp = 0;
                temp = b[j+1];
                b[j+1] = b[j];
                b[j] = temp;
            }
        }
    }   
}
#include<stdio.h>

void sort(int b[]){
     int temp = 0;
     for(int i = 0;i<10;i++){
          for(int j = 0;j<10-i-1;j++){
              if(b[j+1] > b[j]){
                 temp = b[j];
                 b[j] = b[j+1];
                 b[j+1] = temp;
              }  
          }
     }
 }

int main(){

    int a[10];
    printf("\nplease enter numbers you want to sort:\n");
    for(int i = 0;i<10;i++){
        scanf("%d ",&a[i]);
    }
    printf("\nThe number you have input were:");
    for(int i=0;i<10;i++){
        printf("%d ",a[i]);
    }

   sort(a);

    printf("\nThe sorted numbers are:");
         for(int i=0;i<10;i++){
              printf("%d ",a[i]);
         }

return 0;
}
  b[j+1] > b[j] to b[j+1] < b[j]