C++ 检查所有变量是否等于c+中的相同值+;
比较多个变量以确定它们是否都是相同值的最简单方法是什么? 例如,如果var1=53,我想检查var2或var3是否等于var1并且彼此相等? 到目前为止,我已经做到了:C++ 检查所有变量是否等于c+中的相同值+;,c++,compare,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"; if(row1==row
if(row1==row2==row3==row4==col1==col2==col3==col4==diag1==diag2)
cout << "It is a magic square";
else
cout << "Not a magic square";
if(row1==row2==row3==row4==col1==col2==col3==col4==diag1==diag2)
cout它不起作用,因为==
比较运算符返回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 vals[]={row1,row2,row3,row4,col1,col2,col3,col4,diag1,diag2};
布尔等于真;
对于(int i=0;i
我想即使使用按位循环也可以:
int val = vals[0];
for (int i = 1; i < sizeof(vals); ++i)
val &= vals[i];
bool equals = val == vals[0];
int val=vals[0];
对于(int i=1;i
在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);
}
#包括
模板
布尔全等(T&T,U&U)
{
返回(t==u);
}
模板
布尔全等(T&&T,U&&U,Ts&&U…参数)
{
返回(t==u)和全部相等(u,std::forward(args)…);
}
int main()
{
int x=42;
int y=42
std::cout你不能像那样链接=
操作符
if (row1==row2 && row2==row3 && row3==row4 && ...)
您需要使用&&运算符,尽管这会增加您需要键入的代码量。如果您要比较矩阵的值,我建议使用循环和索引来比较值,而不是将它们分配给变量并测试是否相等
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";
if(row1==row2&&row2==row3&&row3==row4&&row4==col1&&col1==col2&&col2==col3&&col3==col4&&col4==diag1&&diag1==diag2)
不能没有任何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);
}
#包括
布尔等于(int val1,int val2,int val3,int val4)
{
返回((val1 | val2 | val3 | val4)==(val1&val2&val3&val4));
}
int main()
{
std::cout我希望下面的信息将给出链“==”操作符如何工作的想法:
由于C语言不支持像a==b==C这样的链式比较;每个等于运算符(==)只对两个操作数进行操作。那么表达式a==b==C的计算方法是什么呢
根据运算符,等于运算符(=)的关联性从左到右操作,这意味着等于运算符(=)的关联性从左到右
表达式a==b==c实际上是(a==b)==c,请参见表达式(a==b)==c的计算方法
•(a==b)将首先进行比较,并返回1(真)或0(假)
•然后将变量c的值与(a==b)的结果进行比较
因此,我们不会使用chain“==”运算符进行多变量比较。如果(row1==row2&&row2==row3&&row3==row4…
将以您想要的方式进行计算,因为如果row2==row1和row2==row3,那么row1==row3。长度是原来的两倍,但它可以工作。在js2==2==2
中,返回false
我不确定其他语言。这一定是我看过的关于“可变模板”的第十篇文章在过去的5分钟里。很好地使用了语言功能。@Derek:它们是非常普遍的索引这在javascript中也应该起作用吗?1==1&&2==2
在javascript中返回true
。@user31782:我对javascript不太了解,但我相信它的逻辑运算符遵循与C和相关语言相同的规则。我检查了你的代码无法正常运行。我有intx=1;inty=1;inta=2;intb=2;int-check=0;if(x==y&&a==b){int-check=786;}
check
仍然保留0
@user31782:你的示例有一个bug-删除第二个“int”否则,您将对变量进行阴影检查。好的。您的答案是正确的。我没有看到row2
与row1==row2&&row2==row3