使用while循环和if语句控制流

时间:2015-11-16 13:04:15

标签: c if-statement while-loop

我无法理解代码段中的控制流。编写代码以获取一个起始词(即cat)和一个endword(即dog)一次更改原始单词的1个字母并到达结束单词 - 检查真实单词的字典。如果到达非真实单词,即cat --> dat,它应该突破循环并尝试更改不同的字母。

while (strcmp (startword, endword) != FALSE)
    {      
    change_letter(startword, endword, i++);
    if ((check_dictionary(dictionary, startword)) == FALSE)
        {
            printf("%s --> ", startword);
            printf("Bad route\n");
            break;
        }
   if ((check_dictionary(dictionary, startword)) == TRUE)
        {
        printf("%s --> ", startword);
        }
    }

change_letter将执行startword[i] = endword[i],其中i初始化为0(对于第一个字母,并在i ++出现时移过字母。

check dictionary将单词与字典进行比较,如果找到单词,则返回1。 (#define TRUE = 1,#define FALSE = 0)。

现在它将打印(如果使用cat and dog作为单词) cat --> dat --> Bad route等等。

根据我的理解,它应该永远不会离开顶部while循环而两个单词不相等。

1 个答案:

答案 0 :(得分:1)

while (strcmp (startword, endword))
{      
    change_letter(startword, endword, i++);
    if (!check_dictionary(dictionary, startword))
    {
        printf("%s --> ", startword);
        printf("Bad route\n");
    }
    else (check_dictionary(dictionary, startword))
    {
        printf("%s --> ", startword);
    }
}

稍微修改了你的代码。删除了break,因为它打破了循环的控制流,并且控制在循环}之后的下一个语句中。那是你的问题。但不确定它现在是否有效,因为它取决于您的check_dictionary实施。

此外,比较== TRUE是无用的。你可以无休止地写check_dictionary(dictionary, startword) == TRUE == TRUE == TRUE == TRUE,意思也是一样的。与while循环相同。它使您的代码不易理解,通常是一种不好的做法。

毕竟,我删除了第二个函数调用,使函数返回值只被评估一次。

此外,尝试通过保持相同的编码风格(支持者!)来控制代码的可读性。它提高了代码的可读性。

抱歉无聊。