[英]Check multiple OR operators in IF statement
我有以下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;
}
不是说我曾经这样做过,但......
for(int i = 0; i < (x==y)+(m==n); ++i) {
std::cout << "Your message\n";
}
1)可维护性代码。 这个循环将导致维护者停止,思考并尝试恢复您的原始意图。 一对if
语句不会。
2)不同的输入应产生不同的输出。 这个原则使用户和程序员受益。 没有什么比运行测试,获得有效输出更令人沮丧,并且仍然不知道程序采用了哪条路径。
鉴于这两个原则,以下是我实际编写代码的方法:
if(x==y) { std::cout << "Your xy message\\n"; } if(m==n) { std::cout << "Your mn message\\n"; }
旁白:当你的意思是\\n
时,永远不要使用endl
。 它们产生语义相同的代码,但是endl
可能会意外地使你的程序变慢。
我不认为这是可能的。 括号内的内容是一个真或假的陈述,没有真/假或真/假陈述。 你可以做的是带有break语句的do / while循环。 但我不认为这是要走的路。 为什么要避免两个if语句?
单“|” 即使结果可以由左侧操作员单独确定,也可以“和”保证两方评估。
你可以这样做,建立“消息”:
string msg = "Your Message\n";
string buildSt = x == y ? m == n ? msg + msg : msg : m == n ? msg : "";
当两者都为真时,编译器仅检查一个条件,因为您已将条件与OR连接。 如果OR链中的一个条件为真,则不需要检查其他条件已经为真,如果其中一个条件为假,则为假。 因此,如果您认为您的逻辑是正确的,那么就不需要进行多次检查。 您的代码要求您在其中一个条件为真的情况下打印消息并编程执行。 如果在两个条件均为真的情况下需要特殊情况,则单独添加。 很快你就不应该期望编译器在OR连接的表达式中进行所有检查。
问候,
达维特
经过测试的代码:
#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();
}
如果您试图查看两个语句是否都为真,那么&&
就是您想要使用的。
在比较布尔值(true / false)值时,查看布尔运算符以查看所有可能的选项。
回答你的问题:
if ((x==y) && (m==n))
{
cout<<"Your Message"<<endl<<"Your Message"<<endl;
}
else if((x==y) || (m==n))
{
cout<<"Your Message"<<endl;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.