2D数组 - 使用if语句比较三个元素

时间:2014-02-28 23:21:25

标签: c++ arrays

我不知道为什么foobar这个词不会被打印出来。

#include <iostream>

using namespace std;

int main(){
    int a = 1;
    int b = 1;
    int c = 1;
    if(a==b==c)
        cout << "this line will be printed out ...\n";

    char ac = 'z';
    char bc = 'z';
    char cc = 'z';
    if(a==b==c)
        cout << "this line will be printed out ...\n";

    char array[3][3]={ {'a','a','a'},{'b','b','b'},{'c','c','c'} };
    if(array[0][0] == array[0][1] == array[0][2]) {
        // these lines will not be printed out
        cout << array[0][0] << array[0][1] << array[0][2] << "\n";
        cout << "foobar\n";
    }
    // aaa
    cout << array[0][0] << array[0][1] << array[0][2] << "\n";

}

我尝试过这样的事情: if(*(array [0] +0)== *(array [0] ++ 1)== *(array [0] +2)等等 但这也不起作用。

谢谢。

3 个答案:

答案 0 :(得分:4)

if(a==b==c)

这不符合你的想法。 a == b将返回truefalse,然后将其与c进行比较。如果你想比较多个项目,你需要这样做:

if (a == b && b == c)

答案 1 :(得分:3)

你不能那样做

if(array[0][0] == array[0][1] == array[0][2])

你必须这样做

if(array[0][0] == array[0][1] && array[0][1] == array[0][2])

我知道第一个看起来很直观,但它没有按照你的想法做到。它首先

array[0][0] == array[0][1]

哪个会返回true,然后它将比较array [0] [2] == 1(true),这将是false。

答案 2 :(得分:0)

在第一个if语句中

if(a==b==c)
    cout << "this line will be printed out ...\n";

输出由以下原因执行。相等运算符从左到右分组。比较结果a == b是布尔值true然后将此值与c进行比较。它被转换为int值1.当c也等于1时,执行带有cout的语句。

在secons if语句中

if(array[0][0] == array[0][1] == array[0][2]) 

将第一个数组[0] [0]与数组[0] [1]进行比较。因为它们是相等的,所以比较array[0][0] == array[0][1]的结果是布尔值true。然后将此布尔值与array [0] [2]进行比较。同样,布尔值转换为int值1并与'a'(也被提升为int)进行比较。因为1不等于'a',所以整个条件都是假的。

您的意思是以下

if( array[0][0] == array[0][1] && array[0][1] == array[0][2]) 

在这种情况下,条件的结果将等于true,因为array [0] [0]等于array [0] [1]并且array [0] [1]等于array [0] [ 2]。

第一个if语句中的条件也应该重写为

if(a==b && b==c)

那么它不会取决于c的值等于1。