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