在IF语句中检查多个OR运算符

时间:2013-01-15 20:15:57

标签: c++ if-statement conditional-statements

我有以下C ++代码:

if(x==y||m==n){
cout<<"Your message"<<endl;
}

如果x等于y或m等于n,程序将打印“您的消息”。但如果两个条件都成立,程序只测试其中一个并最终输出一个“你的消息”。

有没有办法使用单个if语句根据每个条件独立打印每个"Your message"

使用多个if语句,输出与下面的输出相同。

if(x==y){
cout<<"Your message"<<endl;
}

if (m==n){
cout<<"Your message"<<endl;
}

7 个答案:

答案 0 :(得分:10)

不是说我曾经这样做过,但是......

for(int i = 0; i < (x==y)+(m==n); ++i) {
  std::cout << "Your message\n";
}

<小时/> 让我对此进行扩展。我永远不会这样做,因为它违反了两个原则:

1)可维护性代码。这个循环将导致维护者停止,思考并尝试恢复您的原始意图。一对if语句不会。

2)不同的输入应产生不同的输出。这个原则使用户和程序员受益。没有什么比运行测试,获得有效输出更令人沮丧,并且仍然不知道程序采用了哪条路径。

鉴于这两个原则,以下是我实际编码的方式:

if(x==y) {
  std::cout << "Your x-y message\n";
}
if(m==n) {
  std::cout << "Your m-n message\n";
}

除此之外:当您的意思是endl时,切勿使用\n。它们生成语义相同的代码,但endl可能会意外地使您的程序变慢。

答案 1 :(得分:2)

我认为这不可行。括号内的内容是一个真或假的陈述,没有真/假或真/假陈述。你可以做的是带有break语句的do / while循环。但我不认为这是要走的路。为什么要避免使用两个if语句?

答案 2 :(得分:0)

你可以这样做,建立“消息”:

string msg = "Your Message\n";
string buildSt = x == y ? m == n ? msg + msg : msg : m == n ? msg : ""; 

答案 3 :(得分:0)

单曲“|”或“&amp;”即使结果可以由左侧操作员单独确定,也可以进行评估。

答案 4 :(得分:0)

当两者都为真时,编译器仅检查一个条件,因为您已将条件与OR连接。 如果OR链中的一个条件为真,则不需要检查其他条件已经为真,如果其中一个条件为假,则为假。因此,如果您认为您的逻辑是正确的,那么就不需要进行多次检查。您的代码要求您在其中一个条件为真的情况下打印消息并编程执行。如果在两个条件均为真的情况下需要特殊情况,则单独添加。很快你就不应该期望编译器在OR连接的表达式中进行所有检查。

此致

达维特

答案 5 :(得分:-2)

经过测试的代码:

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

void main() {
    int x=1;
    int y=1;
    int m=1;
    int n=1;
    string mess1="Your message 1\n";
    string mess2="Your message 2\n";
    cout<<((x==y)?mess1:"")+((m==n)?mess2:"");
    getchar();
}

答案 6 :(得分:-2)

如果您正试图查看两个陈述是否属实,则&&就是您想要使用的内容。

在比较布尔值(true / false)值时,请查看Boolean Operators以查看所有可能的选项。

回答你的问题:

    if ((x==y) && (m==n))
    {
        cout<<"Your Message"<<endl<<"Your Message"<<endl;
    }
    else if((x==y) || (m==n))  
    {
        cout<<"Your Message"<<endl;
    }