簡體   English   中英

在IF語句中檢查多個OR運算符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM