繁体   English   中英

Turbo C在执行C气泡排序程序时挂起

[英]Turbo C hangs while executing a C bubble sort program

我已经编写了一个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();
}

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

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

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

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

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

此代码中有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()循环轻松解决它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM