C++ If语句故障排除
我的密码是:C++ If语句故障排除,c++,C++,我的密码是: if(seatingChart[row][seat][incorrectQuestion].question==seatingChart[compareRow][compareSeat][compareIncorrectQuestion].question&&seatingChart[row][seat][incorrectQuestion].answerChoice==seatingChart[compareRow][compareSeat][compareInc
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
};
compareAnswerChoice返回一个无符号整数值。事实上,参数中的每个值都是无符号整数值,但final or后面的参数似乎破坏了if语句。这些值都不是负数,它们从字符(小写和大写)转换为1到26(含1和26)之间的无符号整数。编译没有返回错误,向量中的参数引用了它们的正确位置
当我简单地使用:
if (seatingChart[row][seat][incorrectQuestion].answerChoice ==
compareAnswerChoice)
下面的代码工作得很好,但是当我添加前一个if语句中的任何参数时,里面的代码都无法工作
我知道我做了一些不正确的事情,但我不知道到底是什么,所以我无法纠正自己。谁能告诉我参数有什么问题吗?我想你的问题在于
&
运算符的优先级高于|
。尝试在if语句中添加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))
< C++运算符>代码> & & <代码>比OPETAOR <代码> > < <代码>(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)
逻辑AND运算符&&
的优先级高于逻辑OR运算符|
,因此这相当于:
if ((question == compare_question && answer == compare_answer) ||
answer == compareAnswerChoice)
您可能想要的是:
if (question == compare_question &&
(answer == compare_answer || answer == compareAnswerChoice))
实际上,我希望前两个参数共享and运算符,第三个参数是分开的,所以我认为这不会解决问题。@user3093536请您解释一下代码是如何失败的,以及预期的行为是什么?实际上,情况正好相反。
&&
运算符的优先级高于| |
。当seatingChart[row][seat][incorrectQuestion]时,if语句后面的代码不会执行。answerChoice等于compareAnswerChoice。我希望它能够执行,因为or运算符,它们相等。@user3093536“它不执行”是什么意思?前者是我希望的;answer和compareAnswerChoice的值确实相等,但它仍然不能正常运行。我将在更多代码中进行编辑,以显示在if语句之前发生的情况。在这种情况下,我建议您实际创建我所显示的临时变量,并打印它们的值,以便您可以看到发生了什么。