为什么c++中的if语句不能处理多个条件

Why the if statement does not work with multiple conditions in C++?

本文关键字:处理 条件 不能 语句 c++ 中的 if 为什么      更新时间:2023-10-16

我遇到了一个奇怪的问题。由于某些原因,即使用逗号和括号分隔多个||语句也不能工作。我最不希望工作的就是&语句,它需要满足两个条件,但在我的例子中,它只适用于一个条件,就像它是一个OR语句一样。

谁能给我解释一下为什么会发生这种事?我很困惑。

:

#include<iostream> 
#include<vector>
#include<string>
using namespace std;

int main()
{
string quest;
quest = "Where is my dog?";
string::iterator m;
vector<string>question;
string t;
for(m = quest.begin(); m != quest.end(); m++)
{
    if(*m != ' ' & *m != ',' & *m != '?' & *m != '.') //works with & and &&
    {
        t.push_back(*m);
    }
    else
    { 
        cout << t << endl;
        question.push_back(t);
        t.clear();
    }
}
}

不工作:

#include<iostream> 
#include<vector>
#include<string>
using namespace std;

int main()
{
string quest;
quest = "Where is my dog?";
string::iterator m;
vector<string>question;
string t;
for(m = quest.begin(); m != quest.end(); m++)
{
    if(*m != ' ' || *m != ',' || *m != '?' || *m != '.')    // DOES NOT WORK
    {
        t.push_back(*m);
    }
    else
    { 
        cout << t << endl;
        question.push_back(t);
        t.clear();
    }
}
}
if(*m != ' ' || *m != ',' || *m != '?' || *m != '.')    // DOES NOT WORK

你期望它做什么?你问的是某物不是A还是不是B。其中任何一个总是为真(只要A和B不是相同的东西),所以你的表达式作为一个整体总是为真。

看起来你可能想要:

if(*m != ' ' && *m != ',' && *m != '?' && *m != '.')

如果*m是除空格、逗号、问号或句号以外的任何,则该条件为真。

您应该使用&&作为逻辑"answers"。

&运算符用于按位"answers",在您的情况下产生true,因为语句中的所有字符至少有一个公共位点亮。

你想做什么?

请注意,如果目的是过滤掉",? "字符,那么正确的做法是使用&&,因为||不会这样做(因为每个字符至少适合一个,所以您永远不会进入else子句,始终转到then)。

或者查看第一个,如果不匹配,则转到下一个并检查,否则执行代码。所以如果m是' ',它将通过第一个测试,但第二个测试将通过,因为' '不是','。

我希望你真正想要的是这样的内容:

if (!(*m == ' ' || *m == ',' || *m == '?' || *m == '.'))

您应该使用&&而不是&,因为&&是逻辑运算符,而&是位运算符。

当涉及if测试时,您需要记住操作符是如何工作的。

使用逻辑OR (||)意味着如果一个条件则整个语句为真。

使用逻辑AND (&&)意味着如果所有条件true则整个语句为真。

有关c++操作符的帮助,请参阅本页。下面大约一半是关于逻辑和位操作的部分。

编辑:希望这个代码示例将帮助您澄清困惑:

int A = 0;
int B = 1;
if (A == 0 && B == 0) {
  //This code will not run, as the whole statement is false
  . . . .
}
if (A == 0 && B == 1) { 
  //This code will run, as the whole statement is true
  . . . .
}
if (A == 0 || B == 0) {
  //This code will run, as A = 0, so the whole statement is true
  . . . .
}