比较多个变量以查看它们是否都是相同值的最简单方法是什么? 例如,如果var1 = 53,我想检查var2或var3是否等于var1和彼此? 到目前为止,我已经这样做了:
if(row1==row2==row3==row4==col1==col2==col3==col4==diag1==diag2)
cout << "It is a magic square";
else
cout << "Not a magic square";
然而,这似乎不起作用。 谢谢你的帮助。
答案 0 :(得分:11)
在C ++ 11中,您可以使用可变参数模板来定义自己的函数:
#include <iostream>
template<typename T, typename U>
bool all_equal(T&& t, U&& u)
{
return (t == u);
}
template<typename T, typename U, typename... Ts>
bool all_equal(T&& t, U&& u, Ts&&... args)
{
return (t == u) && all_equal(u, std::forward<Ts>(args)...);
}
int main()
{
int x = 42;
int y = 42
std::cout << all_equal(42, y, x);
}
答案 1 :(得分:3)
你不能像这样链接==
运营商。你需要写,例如
if (row1==row2 && row2==row3 && row3==row4 && ...)
答案 2 :(得分:3)
我希望以下信息能够让我们了解链'=='运算符的工作原理:
由于C语言不支持链式比较,如a == b == c;每个等于运算符(==)仅对两个操作数进行操作。那么表达式a == b == c如何计算?
根据运算符的相关性等于运算符(==)从左到右运算,这意味着相等运算符(==)的关联性是从左到右。
表达式a == b == c实际上是(a == b)== c,看看表达式(a == b)== c如何计算?
•(a == b)将首先进行比较并返回1(真)或0(假)。
•然后将变量c的值与(a == b)的结果进行比较。
因此我们不会使用链'=='运算符进行多变量比较。
答案 3 :(得分:2)
它不起作用,因为==
比较运算符返回true
或false
(1
或0
)。为避免进行成对比较,我猜最好的方法是使用循环:
int vals[] = {row1,row2,row3,row4,col1,col2,col3,col4,diag1,diag2};
bool equals = true;
for (int i = 0; i < sizeof(vals); ++i) {
if (vals[i] != vals[i+1]) {
equals = false;
break;
}
}
我想即使使用按位循环也能正常工作:
int val = vals[0];
for (int i = 1; i < sizeof(vals); ++i)
val &= vals[i];
bool equals = val == vals[0];
答案 4 :(得分:0)
您需要使用&amp;&amp;运算符虽然这会增加您需要键入的代码量。如果您要比较矩阵的值,我建议使用循环和索引来比较值,而不是将它们分配给变量并测试相等性。
if(row1==row2 && row2==row3 && row3==row4 && row4==col1 && col1==col2 && col2==col3 && col3==col4 && col4==diag1 && diag1==diag2)
cout << "It is a magic square";
else
cout << "Not a magic square";
答案 5 :(得分:0)
没有任何if
的解决方案#include <iostream>
bool equals(int val1, int val2, int val3, int val4)
{
return((val1 | val2 | val3 | val4) == (val1 & val2 & val3 & val4));
}
int main()
{
std::cout << "1, 1, 1, 1 -> " << (equals(1, 1, 1, 1)?"true":"false") << std::endl;
std::cout << "0, 0, 0, 0 -> " << (equals(0, 0, 0, 0)?"true":"false") << std::endl;
std::cout << "0, 0, 1, 1 -> " << (equals(0, 0, 1, 1)?"true":"false") << std::endl;
std::cout << "3, 3, 1, 1 -> " << (equals(3, 3, 1, 1)?"true":"false") << std::endl;
std::cout << "-5, -5, -5, -5 -> " << (equals(-5, -5, -5, -5)?"true":"false") << std::endl;
return(0);
}