2012-12-14 61 views
1

所以我有一个关于bool变量的问题。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";

现在,这是我understaning的布尔逻辑的,它是不正确

如果 “n” 被输入=> N不是Y,它是因此纠正布尔为真=> 1

如果 “Y” 被输入=> Y不是Y,它是错误的,因此FASLE = > 0

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

+1

'布尔逾期= YN = 'Y',' – triclosan

+1

这就是*天气*我见过最糟糕的法术! :)(尝试*是否*) –

+0

哈哈我写完全不同的单词:D – user1888353

回答

2

除了jrok的回答,您遇到的问题是您假定小写字母和大写字符是相同的东西。他们是不是。 'y'和'Y'是两个不同的字符。 'n'和'N'同样的东西。

你写:

如果 “n” 的输入被=> N不是Y,它是正确的,因此是布尔真 => 1

号 'n' 是不'Y'。

如果输入 “Y”=> Y不是Y,它是错误的,因此FASLE => 0

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

试试这个:

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

啊,+1,它没有发生在我身上,这可能会混淆OP。 – jrok

2

意想不到的行为的原因是,你比较char和字符串文字"y"。字符串文字的类型为const char[n],其中n是文字的长度,包括终止NUL字符。

用文字代替字符比较:

yn != 'y'

当你这样说:yn != "y",炭提升为int和字符串字面量衰减到const char*。这应该如何表现没有标准没有指定。

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

+0

好吧我纠正了它,但我不明白为什么N是0和Y是1 – user1888353

+0

而根据我的逻辑,它应该是N - 1和Y - 0 – user1888353

+1

我的代码中没有看到任何1或0。你的意思是真假吗? –