理解if中的if,else if,else的控制流

时间:2014-02-25 18:17:40

标签: c if-statement controls flow

我在C中有以下代码。它正在工作,但我不明白为什么它有效。在我脑海里它不应该。正如你所看到的,我正在使用两个数组,我正在使用array [i]和array [j]“抓住”数组中的元素。对于array [j],我想只测试第一个if和第二个if;对于数组[i]我想只测试第二个if,第二个if,以及最后一个。

写这种方式看起来并不优雅。在这种情况下,最佳做法是什么?另外,我认为C如果被评估为True则会停止测试条件。如果是这种情况,为什么代码在评估第一个if时仍然有效,如果为真;它似乎继续使用数组[i]进行测试。 (这就是我希望它工作的方式;我只是不知道它为什么会起作用)。

for (int i = 0, j = 0; i <= numChars; ++i )
{   
    int index = j % keyNumChars; 

    if (isupper(argv[1][index]))
    {
        // execute code A1
    }

    else if (islower(argv[1][index]))
    {
        // execute code A2
    }

    if (isupper(plainText[i]))
    {
        // execute code B1
    }

    else if (islower(plainText[i]))
    {
        // execute code B2
    }

    else
    {
        //execute code B3
    }
}

2 个答案:

答案 0 :(得分:1)

第一个else与第一个if一致,两者都与j的测试有关。完成后,执行路径将从第二个if开始,因为它前面没有else;第二个ifelse ifelse一起使用,与i的测试有关。这应该可以解释为什么i测试和j测试都有效。

顺便提一下,代码可能需要在某个时刻增加j;否则它每次都会继续测试j = 0。

答案 1 :(得分:1)

请允许我重新格式化

for (int i = 0, j = 0; i <= numChars; ++i )
{   
    int index = j % keyNumChars; 

    if (isupper(argv[1][index])) {
        // execute code A1
    } else if (islower(argv[1][index])) {
        // execute code A2
    }

    if (isupper(plainText[i])) {
        // execute code B1
    } else if (islower(plainText[i])) {
        // execute code B2
    } else {
        //execute code B3
    }
}