2016-05-28 8 views
-1

この機能では、ブレークアウトを6に設定していません。プリントすると、それに続く数字がない「ブレークアウト」が表示されます。なぜこのメンバ変数をこのメンバ関数で設定できないのですか?

void tokens::driver() 
{ 
    //comment(getInput()); 
    // std::cout<< "driver working"<<std::endl; 
    breakout=6; 
    std::cout<< "breakout"<<breakout<< std::endl; 
    integerConstant(breakout); 
    //symbol(getInput()); 
    std::cout<< "breakout"<<breakout<< std::endl; 
} 

マイHファイルのようなある:

class tokens 
{ 
    public: 
    void driver(); 
    char breakout; 

    private: 
    char getInput(); 
    char integerConstant(char input); 
    char symbol(char input); 
    char whatWord(char input); 
    char comment(char input); 
    bool symbolMap(char input); 
    bool keywordMap(std::string input); 
}; 
+2

[最小、完全、および検証可能な例](http://stackoverflow.com/help/mcve)を入力してください。 –

+3

'6!= '6'' – user657267

+1

@ user657267なので、どうしたらいいですか? OPは 'cout'を使用しています。 –

答えて

1
breakout=6; 

上記のステートメントは、非印刷可能であるACKあるbreakoutから6のASCII値を割り当てます。

1

元はbreakoutが6に設定されています。これは、文字エンコーディング値が印刷できないASCII文字であるためです。

char値6からcoutに渡す可能性のある効果は、何も表示されないことです。その代わりに、整数として渡すためのちょっとしたトリックは、+breakoutのようにプレフィックス+演算子を使用することです。次に、値6が表示されます。

integerConstantには、単一の引数が値渡しされます。これにより、実際の引数のコピーが作成されます。コピーに加えられた変更は、実際の引数に反映されません。


あなたは文字 するbreakoutを意図した場合は、それはこのように、平野アポストロフィで囲ま指定する必要があります。

breakout = '6'; 

文字のためのASCII値48 + 6 = 54なので、古いIBMメインフレーム(ASCIIの代わりにEBCDICを使用する)を除いて、上記の割り当ては

012に相当します

54より'6'を書く方がはっきりしています。

関連する問題