簡體   English   中英

為什么|| 操作員在我的情況下工作

[英]Why does || operator work in my situation

為什么這是使用 || 的無限循環邏輯運算符

char c;
std::cin >> c;
while( c != 'y' || c != 'Y' || c != 'N' || c != 'n') 

但這不是

while( c != 'y' && c != 'Y' && c != 'N' && c != 'n')

我不明白為什么 && 運算符在這里工作,因為邏輯思考 || 運營商更適合。

讓我們看看最小的部分:

c != 'Y' || c != 'N'

如果 c 為“Y”則不是“N”,如果為“N”則不是“Y”。 又名:

c  |  c != 'Y' || c != 'N'
Y  |     1     ||   0      =  1
N  |     0     ||   1      =  1
?  |     1     ||   1      =  1

如果您的邏輯無論如何總是返回 1,則循環將永遠運行。 我假設您希望等到將c作為這些值之一,因此請按邏輯編寫。

我想等到 c 是 ['y', 'Y', ...] 之一

你也許可以寫一些更好的代碼:

std::array<char> options = {{'y', 'Y', 'n', 'N'}};

while (std::none_of(std::begin(options), std::end(options), 
         [&c](char check) { return check == c; };)) {
    std::cout << "Hey write the correct character!\n";
}

未經測試!

您正在使用||檢查始終為真的條件 operator, ( c != 'y' || c != 'Y' || c != 'N' || c != 'n')

這始終是正確的,因為它始終會滿足您的條件語句中的至少 3 個條件。

如果您的 char 是n那么它將滿足其余條件c!='y'c!='Y'c!='N'並且對於任何其他字符類似

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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