我无法理解代码段中的控制流。编写代码以获取一个起始词(即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循环而两个单词不相等。
答案 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循环相同。它使您的代码不易理解,通常是一种不好的做法。
毕竟,我删除了第二个函数调用,使函数返回值只被评估一次。
此外,尝试通过保持相同的编码风格(支持者!)来控制代码的可读性。它提高了代码的可读性。
抱歉无聊。