我在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
}
}
答案 0 :(得分:1)
第一个else
与第一个if
一致,两者都与j的测试有关。完成后,执行路径将从第二个if
开始,因为它前面没有else
;第二个if
,else if
和else
一起使用,与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
}
}