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

4
我是一个新手程序员,我的学校作业要求我创建一个包含if循环的简单程序。 基本上,如果a大于18,则希望我的代码返回true,如果a小于18,则返回false。每次canTakeRoadtest返回false时,我还希望a增加一。当我运行我的代码时,我只得到了:

"我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代表假(false),其他任何数字代表真(true)。使用循环将年龄递增直到达到18岁。 - Tarik
@Tarik 不是真的;例如,有些实现只允许将0x01作为true的表示。 - M.M
@M.M 这符合语言规范的标准行为吗? - Tarik
@Tarik,语言规范没有说明编译器在底层如何表示布尔值。不同的编译器可能会有不同的处理方式。 - M.M
1
"If Loop"? 你是指 "If Block" 吗? - Alexis Wilke
2个回答

4

在C++中,每种变量类型都有一个数字表示。这是有道理的,因为在计算机的基本层面上,它所处理的仅仅是数字。有两种主要的原始数据类型通常被表示为不同于数字的形式,但实际上它们也只是数字。第一种是bool,第二种是char

例如,如果您设置

bool myBool = true;

在幕后,它实际上是将您的变量设置为1。同样,如果您设置
myBool = false;

在幕后,它将是0。对于chars,同样的规则适用。如果你设置

char myChar = 'a';

这段代码将字符设置为97。每个字符都有一个数字表示,您可以在此表格中查看。

那么,为什么cout显示的是bool的数字表示而不是用 "英语" 表示呢?这只是因为编写 iostream 的人决定,当您给它一个 bool 时,它会显示数字表示而不是 "英语" 表示。然而,对于chars则不适用。它们将由 iostream 表示为一个字符。

要修复 iostream 打印错误表示的问题,请将您的代码从

cout << "I can take my road test. " << canTakeRoadtest << endl;

为了

cout << "I can take my road test. false" << endl;

正如Lovelace42所述,您还可以使用boolalpha。


有人能解释一下为什么我的答案被踩了吗?我不认为它有任何错误...看起来像是恶意评分。我是一个相对新的用户,希望能保留我已经拥有的一点声望。 - user4981832
1
我认为可能是因为你没有提供解决方案来解决OP的问题,只是解释了为什么会发生这种情况。不过,我认为理解事物的工作原理而不仅仅是找到问题的“补丁”是一件好事。 - Bettorun
@gooroo7 感谢您的帮助。它正在显示我想要的文本,然而“a”仍然只保持为0。这是为什么? - Danny H
1
@Danny 我认为这是因为你试图将 if 用作循环。if语句不是循环,它只会检查您给定的条件是否为真/假,如果条件为真,则运行 { } 中的代码,然后继续执行。三个主要的循环是 for 循环、while 循环和 do while 循环。这里有一些关于循环的信息 - user4981832

2
使用boolalpha。默认情况下,bool值是整数,boolaplpha设置bool标志以输出其文本表示形式。 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++;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接