为什么我的布尔值返回一个整数?
我对编程世界相当陌生,我有一个学校任务来创建一个包含if循环的简单程序。 基本上,我想我的代码返回真正如果一个大于18,并且假如果一个小于18.我也想一个由一个每次增加canTakeRoadtest回报false。当我运行我的代码,我得到的是为什么我的布尔值返回一个整数?
“我是0岁。
我可以把我的路试。0”
我不知道为什么BOOL canTakeRoadtest将返回一个整数,并且为什么a没有递增。任何帮助将不胜感激,我为这个简单的问题表示歉意,但我们都从某处开始!
我的编码环境是Eclipse Neon,如果它有所不同。
#include <iostream>
using namespace std;
int main() {
//Local Variables
int a = 0;
bool canTakeRoadtest = false;
//If Loop
if (a >= 18) {
canTakeRoadtest = true;
cout << "I'm ready!\n";
} else {
canTakeRoadtest = false;
cout << "I am " << a << " years old.\n";
cout << "I can take my road test. " << canTakeRoadtest << endl;
a++;
}
//return 0;
}
使用boolalpha。默认情况下,布尔值是整数,boolaplpha设置布尔标志,以输出其文字表述
http://www.cplusplus.com/reference/ios/boolalpha/
或者,你可以改变你的cout语句。
if (a >= 18) {
canTakeRoadtest = true;
cout << "I'm ready!\n";
} else {
canTakeRoadtest = false;
cout << "I am " << a << " years old.\n";
cout << "I can take my road test. false" << endl;
a++;
}
在幕后,C++中的每个变量类型都有一个数字表示。这是有道理的,因为在计算机的基础层面上,所有的都是数字。有两种主要的基本数据类型(通常)表示为数字以外的其他数据类型,但实际上只是数字。第一个是bool,第二个是char。
例如,如果你设置
bool myBool = true;
在幕后,它真的是你的变量设置为。同样,如果您设置
myBool = false;
这将是幕后。相同的规则适用于字符。如果设置
char myChar = 'a';
它确实是焦炭设置为。每个角色都有一个数字表示,如果您看到这个table,您可以看到这些数字。
所以,至于为什么COUT被显示布尔的数字表示,而不是“英语”,这完全是因为谁编码的iostream决定,当你给它一个布尔它显示数字表示而不是“英文”表示。然而,这同样不适用于字符。他们将被表示为iostream。
要解决的iostream从打印出不正确的表现,你的代码
cout << "I can take my road test. " << canTakeRoadtest << endl;
改变
cout << "I can take my road test. false" << endl;
你也可以使用boolalpha,作为Lovelace42说。
在引擎盖下,布尔值是整数。 0是错误的,其他的都是真的。使用循环来增加年龄,直到你命中18为止。 – Tarik
@Tarik不正确;例如某些实现只允许'0x01'作为'true'的表示形式。 –
@ M.M这是按照语言规范的标准行为吗? – Tarik