2017-04-02 108 views
4

我對編程世界相當陌生,我有一個學校任務來創建一個包含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

回答

2

使用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++; 
} 
3

在幕後,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.爲什麼是這樣呢? –

相關問題