Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ If语句故障排除_C++ - Fatal编程技术网

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语句之前发生的情况。在这种情况下,我建议您实际创建我所显示的临时变量,并打印它们的值,以便您可以看到发生了什么。