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。
我试图编写一个函数,该函数的输入是一个名为 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。