为什么我的布尔值返回一个整数?

问题描述:

我对编程世界相当陌生,我有一个学校任务来创建一个包含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; 

} 
+0

在引擎盖下,布尔值是整数。 0是错误的,其他的都是真的。使用循环来增加年龄,直到你命中18为止。 – Tarik

+0

@Tarik不正确;例如某些实现只允许'0x01'作为'true'的表示形式。 –

+0

@ M.M这是按照语言规范的标准行为吗? – Tarik

使用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

有人可以向我解释为什么我的答案是downvoted?我不相信它有什么问题......它诚实地看着我像一个巨魔做它。我是一个相对较新的用户,并希望保持我的小声望。 – gooroo7

+1

我相信这可能是因为你没有提供解决OP问题的解决方案,只解释了它发生的原因。不过,我认为了解事情的运作方式是一件好事,而不是简单地找到问题的“补丁”。 – Bettorun

+0

@ gooroo7感谢您的帮助。它显示我想要的文本,但是** a **仍然只能保持为0.为什么是这样呢? –