我不知道为什么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)等等 但这也不起作用。
谢谢。
答案 0 :(得分:4)
if(a==b==c)
这不符合你的想法。 a == b
将返回true
或false
,然后将其与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。