所以我对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";
?
答案 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');