为什么if语句不适用于C++中的多个条件?

VSB*_*VSB -1 c++ if-statement conditional-statements

我遇到了一个奇怪的问题.由于某种原因多个|| 语句,即使除以逗号和括号也不起作用.我期望工作的最后一件事是&语句,它要求满足两个条件,但在我的情况下,它适用于一个条件,就好像它是一个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();
    }
}
}
Run Code Online (Sandbox Code Playgroud)

不起作用:

#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();
    }
}
}
Run Code Online (Sandbox Code Playgroud)

Gre*_*ill 7

if(*m != ' ' || *m != ',' || *m != '?' || *m != '.')    // DOES NOT WORK
Run Code Online (Sandbox Code Playgroud)

你期望做什么?你问的是某些东西是不是A或者是B.其中任何一个都是真的(只要A和B不是同一个东西),所以你的表达总是正确的.

看起来你可能想要:

if(*m != ' ' && *m != ',' && *m != '?' && *m != '.')
Run Code Online (Sandbox Code Playgroud)

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