-1

我想知道为什么运算符 || 当我将“输入”与数组元素进行比较时不起作用... 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";
    }
}
4

2 回答 2

1

用于显示1变量day应同时为 7 个不同的值。因为那是不可能的,你总是看到0

作为一般规则(不严格),您应该||在进行匹配(==)而不是不匹配(!=)时使用。

于 2018-09-25T13:14:09.163 回答
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你的七个条件中的六个将永远为真。

您需要阅读并记住德摩根的未来计划的法律


因此,有不止一种解决方案可以解决此问题。

他们可能是:

1.多个If条件,一个内另一个:

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值匹配。

我们可以将函数声明为 a 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你的 main 里面的 long :

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.

于 2018-09-25T13:18:45.683 回答