2014-02-28 350 views
0

我不明白爲什麼foobar一詞不會被打印。二維數組 - 使用if語句比較三個元素

#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"; 

} 

我曾嘗試是這樣的: 如果(*(數組[0] 0)== *(數組[0] ++ 1)== *(數組[0] 2)和等 但這並不工作過。

謝謝。

+2

C++是不Python中,愚蠢的。 – rightfold

+1

'a == b'評估爲'bool'。這將與'c'進行比較。 –

+0

第一行工作原因是'true == 1'。其次,因爲你再次比較'a','b'和'c'而不是'aa == bc == cc'。 –

回答

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] 

將返回真,那麼它將比較陣列[0] [2] == 1(真),這將是錯誤的。

+1

從技術上講,他*可以做'a == b == c',但它不會做他認爲會的事。 –

4
if(a==b==c) 

這不符合你的想法。 a == b將返回truefalse,然後將其與c進行比較。如果你想比較多的項目,你需要做的是這樣的:

if (a == b && b == c) 
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]的結果是布爾真。然後將此布爾值與數組[0] [2]進行比較。布爾值再次轉換爲int值1並與'a'(也被提升爲int)進行比較。由於1不等於'a',所以整個條件是錯誤的。

你的意思是以下

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

在這種情況下的條件的結果將等於真實的,因爲陣列[0] [0]等於陣列[0] [1]和數組[0] [1]等於數組[0] [2]。

在第一if語句的條件也應被重寫爲

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

那麼它不會依賴於c具有值等於1