0

我编写了一个 C 程序来进行冒泡排序,但在执行它时 IDE 挂起。为什么会这样?代码如下:

 #include<stdio.h>
    main()
    {
          int i[3],temp,n,x;
          printf("Enter 4 positive numbers");
          for(n=0;n<=3;n++)
          {
                scanf("%d",&i[n]);
          }
          recheck:
          for(x=0;x<=2;x++)
          {
                if(id[x]>i[x+])
                {
                temp=i[x];
                i[x]=i[x+1];
                i[x+1]=temp;
                }
          }
          if(i[0]>i[1]&&i[1]>i[2]&&i[2]>i[3])
          {
                for(n=0;n<=3;n++)
                {
                      printf("%d",i[n]);
                 }
          }
          else
          {
                 goto recheck;
           }
           getche();
}
4

2 回答 2

6

您应该始终复制粘贴您的代码。您提供的代码有一些拼写错误,甚至无法编译。

忽略错别字存在三个主要问题:

  1. int i[3]只有 3 个元素。i[3]超出范围,访问它可能会导致意外结果。

  2. 交换元素时,您按升序排序,但在检查数组是否完全排序时,您使用降序。

  3. 您正在使用严格的不等式来检查数组是否已排序。如果有两个相等的元素,这将不起作用。

于 2012-06-13T18:33:15.480 回答
0

这段代码有 4 个错误。

1)您将变量声明为i[3]. 所以它只需要三个值。从i[0]i[2]。您正在阅读四个值。因此数组被限制为三个,它不能读取四个值。如果您想读取四个值,请更改i[3]i[4]

2) if(id[x]>i[x+])。这条线有两个错误。你在这里使用id[x]. 但没有变量声明为id[]. 应该是i[x]。第二个是i[x+]。这不是一个有效的声明。它应该是i[x++]

3)您正在按升序对值进行排序并按降序检查它们。所以这会导致一个错误。改变或改变if(i[0]>i[1]&&i[1]>i[2]&&i[2]>i[3]) _if(i[0]<i[1]&&i[1]<i[2]&&i[2]<i[3])if(id[x]>i[x+])if(id[x]<i[x+])

4 您在代码中使用goto语句。但goto不推荐,因为它是一种错误的编程实践。goto 在没有任何函数调用的情况下转发或恢复执行过程。这与结构化编程方法背道而驰。所以不喜欢goto陈述。您可以通过使用两个for()循环轻松解决它。

于 2012-06-14T05:25:15.413 回答