C语言选择排序,最后一个数字后的三角形是什么鬼??

图片说明

代码在这:

#include<stdio.h>
int main()
{
    void sort(int *x,int n);
    int i,*p,a[5];
    p=a;
    printf("please enter 5 numbers:\n"); 
    for(i=0;i<5;i++)
    {
        scanf("%d",p++); 
    }
    p=a;
    sort(p,5);
    for(p=a,i=0;i<5;i++)
    {
        printf("%5d",*p);
        p++;
    }
    putchar("\n");
    return 0;
} 

void sort(int *x,int n)
{
    int i,j,flag,temp;
    for(i=0;i<5;i++)
    {
        flag=i;
        for(j=i+1;j<n;j++)
        {
        if(x[flag]<x[j])
        flag=j;
        }
        temp=x[flag];
        x[flag]=x[i];
        x[i]=temp;
    }
}

putchar("\n"); 

改成:

putchar('\n'); 

试一下,我这边gcc这个报错了,putchar用于输出字符

排序函数 sort 中,可能存在数组访问越界的情况:当 i 等于 4时,j等于 i 加一,为5。这样就越界了!输出不知道会是什么,有乱码就正常。

的确正如楼上所说,sort()函数之中存在访问越界的情况。当i取4,j相应取5,x[5]不是数组x的元素了。将i<n改作i<n-1即可