一世轻尘 发表于 2020-12-20 16:19:49

为啥

本帖最后由 一世轻尘 于 2020-12-20 16:26 编辑

#include<stdio.h>
#include<stdlib.h>
int main()
{
      int n,i,j,temp;
      int*p;
      printf("请输入一个整数n:\n");
      scanf("%d",&n);
      p=(int*)malloc(n*sizeof(int));
      printf("请输入n个整数:\n");
      for(i=0;i<n;i++)
      {
                scanf("%d",&p);
      }
      for(i=0;i<n;i++)
      {
                printf("%d ",p);
      }
      printf("\n");
    for(j=0;j<n-1;j++)
            for(i=0;i<n-1-j;i++)
            {
                  if(p>p)
                  {
                            temp=p;
                            p=p;
                            p=temp;
                        }
                }
      for(i=0;i<n;i++)
                printf("%d ",p);
                return 0;
}擦,我又来了,如果这样把j<n-1,i<n-1-j改为j<n,i<n-j为啥会出现这个结果,而改为j<n,i<n-1就又能正常排序了

风过无痕1989 发表于 2020-12-20 16:36:39

去掉第15行到第18行,这四行没有意义,程序没有问题

一世轻尘 发表于 2020-12-20 16:38:54

风过无痕1989 发表于 2020-12-20 16:36
去掉第15行到第18行,这四行没有意义,程序没有问题

问题在这

风过无痕1989 发表于 2020-12-20 16:40:24

一世轻尘 发表于 2020-12-20 16:38
问题在这

我晕,你少了一副花括号
        for (j = 0;j < n - 1;j++)
        {                                  // 少了花括号
                for (i = 0;i < n - 1 - j;i++)
                {
                        if (p > p)
                        {
                                temp = p;
                                p = p;
                                p = temp;
                        }
                }
        }                                  // 少了花括号

一世轻尘 发表于 2020-12-20 16:45:08

风过无痕1989 发表于 2020-12-20 16:40
我晕,你少了一副花括号

不少的,里面就一个for循环,可以不加的,而且加了也不对,排序后第一个还是0

风过无痕1989 发表于 2020-12-20 16:54:25

一世轻尘 发表于 2020-12-20 16:38
问题在这

for (j = 0;j < n;j++)
{
    for (i = 0;i < n - j;i++)
    {
      if (p [ i ] > p[ i + 1 ])
对于输入10个整数,可以看出,i = 9 时,p[ i + 1 ] = p = p 越界了

页: [1]
查看完整版本: 为啥