2016-05-28 49 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; 

上面的语句分配的6breakoutACK,其是非打印的ASCII值。

1

本来breakout设置为6,它作为字符编码值是不可打印的ASCII字符。

传递char值6到cout的一种可能的影响是没有显示任何内容。一个不错的小窍门,而不是将它作为整数传递,是使用前缀+运算符,如下所示:+breakout。那么你应该看到数值6.

integerConstant单参数是通过值传递。这使实际参数的副本。对副本所做的更改不会反映在实际参数中。


如果您打算breakout字符 ,那么你应该指定它装在普通的单引号,像这样:

breakout = '6'; 

的字符 ASCII值是48 + 6 = 54,所以除了一些旧的IBM大型机(使用EBCDIC而不是ASCII)之外,上述分配等同于

breakout = 54; 

但是写出'6'54更清楚。

相关问题