我想知道为什么运算符||当我将'input'与数组的元素进行比较时不起作用... AND(&&)起作用,但这意味着我的输入必须等于表中的每个元素(否则,-我不明白)。与||运算符,我总是得到结果“ 0”
#include <iostream>
#include <cmath>
#include <cstdlib>
using namespace std;
int main()
{
string days[7] = { "sr","czw","pt","sob","nd","pon","wt" };
string day;
cin >> day;
if (day != (days[0]) || day != days[1] || day != days[2] || day != days[3] || day != days[4] || day != days[5] || day != days[6])
{
cout << "0";
}
else
{
cout << "1";
}
}
答案 0 :(得分:1)
要显示1
,变量day
应该同时为7个不同的值。由于这是不可能的,因此您总是看到0
。
作为一般规则(不严格),进行匹配(||
时应使用==
而不是不匹配(!=
)。
答案 1 :(得分:0)
不清楚要实现什么,因为程序的逻辑完全被搞乱了。
如果您编写如下代码:
if(day != (days[0]) || day != days[1] || day != days[2] || day != days[3] || day != days[4] || day != days[5] || day != days[6])
{
cout<<"0";
}
else
{
cout<<"1";
}
它将始终执行IF的True分支,在这种情况下为cout<<"0";
因为False || True = True
和您的七个条件中的六个始终为真。
您需要阅读并记住De Morgan's laws,以便以后使用程序
因此,有 个以上解决方案可以解决 。
它们可能是:
1。。如果是多个条件,则在另一个条件内:
if(day != (days[0]){
if(day != (days[1]){
if(day != (days[0]){
//and so on ...
}
else{
cout<<"1";
}
}
else{
cout<<"1";
}
}
else{
cout<<"1";
}
但这不干净,很难阅读,我不喜欢...
2。。您可以创建一个递归函数来检查day
值的匹配情况。
我们可以将函数声明为void
,因为我们不需要任何返回值。
void dayCheckMatching(string days[], string day, int counter)
{
if(day != (days[counter]){
dayCheckMatching(days, day, counter)
}
else{
cout<<"Day "<<day<<" matched at index: "<<counter;
return;
}
}
,然后调用它而不是它的主要内容中的长if condition
:
int main()
{
string days[7] = {"sr","czw","pt","sob","nd","pon","wt"};
string day;
cin>>day;
dayCheckMatching(days, day, 0)
return 0;
}
备注:
在void函数示例中可以看到,我们使用return;
语句来在day
与days[index]
值匹配时退出函数。即使函数为return
,也可以随时使用void
退出函数。