【问题标题】:Why is my boolean returning an integer?为什么我的布尔值返回一个整数?
【发布时间】:2024-01-11 21:34:01
【问题描述】:

我对编程世界还很陌生,我的学校作业是创建一个包含 if 循环的简单程序。 基本上,如果 a 大于 18,我希望我的代码返回 true,如果 a 小于 18,我希望我的代码返回 false大于 18。我还希望 a 每次 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 为假,其他为真。使用循环来增加年龄,直到您达到 18 岁。
  • @Tarik 不正确;例如一些实现只允许将 0x01 作为 true 的表示形式
  • @M.M 这是符合语言规范的标准行为吗?
  • @Tarik 语言规范没有说明编译器如何在后台表示布尔值。不同的编译器可以做不同的事情
  • “如果循环”?你的意思是“如果阻止”?

标签: c++ boolean increment


【解决方案1】:

在幕后,C++ 中的每个变量类型都有一个数字表示。这是有道理的,因为在计算机的基础级别上,只有数字。有两种主要的原始数据类型(通常)表示为数字以外的东西,但实际上只是数字。第一个是bool,第二个是char

例如,如果你设置

bool myBool = true;

在幕后,它实际上将您的变量设置为 1。同样,如果你设置

myBool = false;

它会在幕后0。相同的规则适用于 chars。如果你设置

char myChar = 'a';

它确实将字符设置为 97。每个字符都有一个数字表示,如果您查看此table,您可以看到这些。

所以,至于为什么 cout 显示的是 bool 的数字表示而不是“英语”,这仅仅是因为编写 iostream 的人strong> 决定当你给它一个 bool 时,它会显示数字表示而不是“英语”表示。但是,这不适用于 chars。它们将由 iostream 表示为一个字符。

要修复 iostream 打印出不正确的表示,请更改您的代码

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

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

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

【讨论】:

  • 有人可以向我解释为什么我的回答被否决了吗?我不相信它有什么问题......老实说,在我看来它就像一个巨魔做到了。我是一个相对较新的用户,想保持我的小名声。
  • 我相信这可能是因为您没有为 OP 的问题提供解决方案,只是解释了它发生的原因。尽管如此,我认为了解事物的工作原理而不是简单地找到问题的“补丁”是一件好事。
  • @gooroo7 感谢您的帮助。它显示我想要的文本,但是 a 仍然只保持为 0。这是为什么?
  • @Danny 我相信这是因为您试图将if 用作循环。 if 语句不是循环,它只会查看您给它的条件是否为真/假,如果条件为真,则运行{ } 中的代码,然后继续。循环的三个主要内容是for 循环、while 循环和do while 循环。这是循环中的一些information
【解决方案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++;
}

【讨论】:

    最近更新 更多