strcmp() 在 "for" 循环中用作条件时似乎不起作用 - C 语言

strcmp() doesn't seem to work when used as a condition in a "for" loop - C language

我试图编写一个函数,该函数的输入是一个名为 name 的字符串以及其他输入(与此问题的目的无关)。 需要做的一件事是在检查名称(函数的输入)是否对应于已存储在名为 candidates 的数组中的名称之一(已在主函数中早先填充)之后做“某事”程序)。 问题是,当使用 strcmp() 作为 for 循环内的条件时,如下面的代码所示,该函数似乎不起作用:

bool vote(int rank, string name, int ranks[])
{
    // TODO
    for (int c = 0; c < candidate_count && strcmp(candidates[c], name) == 0 ; c++)
    {
            ranks[rank] = c;
            return true;       
    }
    return false;
}

但是,在 for 循环括号内的“If”语句中用作条件时,它似乎工作得很好,如以下代码所示:

bool vote(int rank, string name, int ranks[])
{
    // TODO
    for (int c = 0; c < candidate_count; c++)
    {
        if ((strcmp(candidates[c], name)) == 0)
        {
            ranks[rank] = c;
            return true;
        }        
    }
    return false;
}

我找不到两个版本的代码之间的区别。你能确定问题的原因吗? 提前致谢!

代码的底部版本正在检查 any 候选人是否匹配名称。

顶级版本会检查第一个 候选人是否与姓名匹配。如果匹配,则进入循环并且 returns 为真。如果不匹配,则不满足 for 循环的条件,因此循环退出并返回 false。