检查所有变量是否等于c ++中的相同值

时间:2013-03-04 18:49:32

标签: c++ compare

比较多个变量以查看它们是否都是相同值的最简单方法是什么? 例如,如果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";

然而,这似乎不起作用。 谢谢你的帮助。

6 个答案:

答案 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)

它不起作用,因为==比较运算符返回truefalse10)。为避免进行成对比较,我猜最好的方法是使用循环:

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);
}