如果说明故障排除

If Statement TroubleShooting

本文关键字:排除 故障 说明 如果说 如果      更新时间:2023-10-16

我拥有的代码是:

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))