我拥有的代码是:
if(seatingChart[row][seat][incorrectQuestion].question==seatingChart[compareRow][compareSeat][compareIncorrectQuestion].question&&seatingChart[row][seat][incorrectQuestion].answerChoice==seatingChart[compareRow][compareSeat][compareIncorrectQuestion].answerChoice||seatingChart[row][seat][incorrectQuestion].answerChoice==compareAnswerChoice)
我使用的数据结构是:
struct incorrect
{
unsigned int question;
unsigned int answerChoice
};
concormeanswerchoice返回一个未签名的整数值。实际上,参数中的每个值都是一个无符号的整数值,但是最终之后的参数或似乎打破了if语句。这些值都不是负的,它们从字符(小写和大写)转换为1到26个包含的无签名整数。该汇编未返回错误,向量中的参数是指其正确的位置。
当我简单地使用时:
if (seatingChart[row][seat][incorrectQuestion].answerChoice ==
compareAnswerChoice)
以下代码工作正常,但是当我添加前者if语句的任何前参数时,内部的代码无法正常工作。
我知道我在做不正确的事情,但是我不知道那是什么,所以我无法纠正自己。有人可以告诉我参数怎么了?
在C 操作员&&
中的优先级(13)比OpeAtor ||
(14)高(13)。您需要if
语句中的括号。
@user3093536使用调试器很容易调试此类内容。创建具有已知值的条件,并测试if()
语句与操作员&&
和||
在其中如何使用。介入代码。
让我们开始清理一点,以便我们看到发生了什么:
unsigned int question =
seatingChart[row][seat][incorrectQuestion].question;
unsigned int answer =
seatingChart[row][seat][incorrectQuestion].answerChoice;
unsigned int compare_question =
seatingChart[compareRow][compareSeat][compareIncorrectQuestion].question;
unsigned int compare_answer =
seatingChart[compareRow][compareSeat][compareIncorrectQuestion].answerChoice;
if (question == compare_question && answer == compare_answer ||
answer == compareAnswerChoice)
逻辑和操作员&&
的优先级高于逻辑或操作员||
,因此这等效于:
if ((question == compare_question && answer == compare_answer) ||
answer == compareAnswerChoice)
您可能想要的是:
if (question == compare_question &&
(answer == compare_answer || answer == compareAnswerChoice))
我想您的问题在于&&
操作员的优先级高于||
。尝试添加parens如果语句
if(seatingChart[row][seat][incorrectQuestion].question==seatingChart[compareRow][compareSeat][compareIncorrectQuestion].question &&
(seatingChart[row][seat][incorrectQuestion].answerChoice==seatingChart[compareRow][compareSeat][compareIncorrectQuestion].answerChoice
|| seatingChart[row][seat][incorrectQuestion].answerChoice==compareAnswerChoice))