为什么这个 if 语句的行为不像我预期的那样?

Why does this if statement not behave as I'd expect?

本文关键字:if 语句 为什么      更新时间:2023-10-16

我正在制作一个程序来评估某个东西的价值。我有一个变量,它保存要添加的总值rcoverE。当我为第二个问题测试"y"时,它是有效的,但当我输入"n"时,无论如何它都会加5。为什么会发生这种情况?

    #include <iostream>
    using namespace std;
    int main(){
        int year, yearE, rcoverE;
        string rcover, func;
        cout << "Enter the decade your thing was produced (eg. 20):";
        cin >> year;
        cout << "Does you typewriter have original thingy? (y,n):";
        cin >> rcover;
        rcoverE = 0;
        if(rcover == "y" || "Y"){
           rcoverE = rcoverE + 5;
        }else{
            rcoverE = rcoverE + 0;
        }
        cout << rcoverE;
        yearE = 100 - year / 2;
    }   
if(rcover == "y" || "Y"){

这种情况是错误的,应该是:

if(rcover == "y" || rcover == "Y"){

这:if(rcover == "y" || "Y"){在逻辑上等价于if(rcover == "y" || "Y" != 0),并且"Y" != 0始终为真。

if(rcover == "y" || "Y")

不会按照你的想法进行评估。实际上,它的计算结果是if("rcover=='y')或if('y')",而不是"rcover===('y'|'y'")。在某些语言中,编译器不允许您这样做,但在C++中,只需放入语句"y"即可返回true。您需要将语句更改为:

if(rcover == "y" || rcover == "Y")