2 qq 27530863 qq_27530863 于 2016.02.13 15:50 提问

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;
    }
}

3个回答

leilba
leilba   Rxr 2016.02.13 15:56

putchar("\n"); 

改成:

putchar('\n'); 

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

qq_27530863
qq_27530863 感谢,我中英文切换错了 囧
接近 2 年之前 回复
sinat_33474503
sinat_33474503   2016.02.13 23:12

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

91program
91program   Ds   Rxr 2016.02.13 19:23

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!