支架导致无限循环

时间:2014-01-29 01:39:38

标签: c++ for-loop infinite-loop brackets

与三个 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;
            }



}

有人能够解释原因吗?

3 个答案:

答案 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”不会影响第一个循环。