[英]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();
}
您应该始终复制粘贴您的代码。 您提供的代码有些输入错误,甚至无法编译。
忽略错别字存在三个主要问题:
int i[3]
只有3个元素。 i[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.