与三个 For 循环相关联的括号会导致函数无限循环,
void Bubblesort (char ulist[27], char slist[27], int n)
{
int i,j;
char temp;
for (i=1;i<=n;i++)
{
slist[i] = ulist[i];
for (j=1; j <= n-1 ;j++)
{
for (i = 1; i <=n-j;i++)
{
if (slist[i] < slist[i+1])
{
temp = slist[i];
slist[i] = slist[i+1];
slist[i+1] = temp;
}
}
}
}
}
没有括号;功能到达终点。
void Bubblesort (char ulist[27], char slist[27], int n)
{
int i,j;
char temp;
for (i=1;i<=n;i++)
slist[i] = ulist[i];
for (j=1; j <= n-1 ;j++)
for (i = 1; i <=n-j;i++)
if (slist[i] < slist[i+1])
{
cout << "Step 4";
temp = slist[i];
slist[i] = slist[i+1];
slist[i+1] = temp;
}
}
有人能够解释原因吗?
答案 0 :(得分:2)
您已经更改了循环的语义,并且您的缩进会产生误导。
void Bubblesort (char ulist[27], char slist[27], int n)
{
int i,j;
char temp;
for (i=1;i<=n;i++)
slist[i] = ulist[i];
for (j=1; j <= n-1 ;j++)
for (i = 1; i <=n-j;i++)
if (slist[i] < slist[i+1])
{
cout << "Step 4";
temp = slist[i];
slist[i] = slist[i+1];
slist[i+1] = temp;
}
}
应缩进为
void Bubblesort (char ulist[27], char slist[27], int n)
{
int i,j;
char temp;
for (i=1;i<=n;i++)
slist[i] = ulist[i];
for (j=1; j <= n-1 ;j++)
for (i = 1; i <=n-j;i++)
if (slist[i] < slist[i+1])
{
cout << "Step 4";
temp = slist[i];
slist[i] = slist[i+1];
slist[i+1] = temp;
}
}
答案 1 :(得分:1)
问题是没有括号你实际上没有嵌套for循环。考虑
for (i=1;i<=n;i++)
slist[i] = ulist[i];
for (j=1; j <= n-1 ;j++)
没有括号只有slist[i] = ...
行作为第一个for循环的一部分执行。第二个for循环作为完全独立的实体执行
一旦将循环组合在一起,尽管最外层和最内层循环使用相同的索引变量。他们对价值的相互改变共同构成了一个无限循环。尝试为每个for
循环使用不同的索引变量,它将解决问题。这没有括号,因为我描述的初始错误导致第一个和最后一个循环没有嵌套,因此它们不会同时操作相同的值
答案 2 :(得分:0)
这两个函数有不同的算法。在第一个函数中,您有三个嵌套循环。第三个循环使用与第一个循环相同的控制变量“i”。所以循环是无限的,因为在第三个循环后,我总是等于2。
在第二个函数中,第一个循环是一个单独的循环,其他两个循环没有嵌套在第一个循环中。因此,在第三个循环中更改控制变量“i”不会影响第一个循环。