布尔变量。检查的逻辑

时间:2012-12-14 13:30:47

标签: c++ boolean-logic

所以我对bool变量有疑问。

这是一个检查应付款是否按时支付的程序,如果没有,则乘以1.10。

#include <iostream>
using namespace std;
int main()
{
    float Dues;
    cout<<"Enter ammount: \n";
    cin>>Dues;
    cout<<"On time? (y/n)";
    char yn;
    cin>>yn;
    bool Overdue = yn !="y"; //TRUE (1) if it is late, FALSE (0) if it is on time
    float AmountDue;
    AmountDue = Overdue ? Dues*1.10 : Dues;
    cout<<"Ammount due: ";
    cout<<<<AmountDue;
    return 0;

}

我没有理解布尔的逻辑

我们有

bool Overdue = yn !="y";

现在这是布鲁尔逻辑的 我的低估 ,它是 不正确

如果输入“n”=> N不是Y,它是CORRECT因此bool是真的=&gt; 1

如果输入“y”=&gt; Y不是Y,它是错误的,因此fasle =&gt; 0

但它实际上是另一种方式,我不能在逻辑上解释它自己。 什么逻辑基于bool Overdue = yn !="y";

2 个答案:

答案 0 :(得分:2)

出现意外行为的原因是您要将char与字符串文字"y"进行比较。字符串文字的类型为const char[n],其中n是文字的长度,包括终止的NUL字符。

与字符文字比较:

yn != 'y'

当您这样说:yn != "y"时,字符将被提升为int,字符串字面值将衰减为const char*。该标准是如何规定的。

表达式的结果存储在bool Overdue中。当yn持有'n'时,表达式为true('n'确实与'y'不同),因此将存储true,反之亦然。)

答案 1 :(得分:2)

除了jrok的答案之外,您遇到的问题是您假设小写和大写字符是相同的。它们是 NOT 。 'y'和'Y'是两个不同的角色。 'n'和'N'也是一样的。

你写道:

  

如果输入“n”=> N不是Y,它是CORRECT因此bool是   true =&gt; 1

没有。 'n'不是'y'。

  

如果输入“y”=&gt; Y不是Y,它是错误的,因此fasle =&gt; 0

这是正确的。 'y'不是'Y'。

请改为尝试:

bool Overdue = (yn != 'n') && (yn != 'N');