c ++ cout with float产生奇怪的结果

时间:2010-07-14 15:17:12

标签: c++ gcc

目前我有以下内容:

float some_function(){
    float percentage = 100;
    std::cout << "percentage = " << percentage;

    //more code
    return 0;
}

给出输出

percentage = 100

但是当我像这样添加一些std :: endl时:

float some_function(){
    float percentage = 100;
    std::cout << "percentage = " << percentage  << std::endl;

    //more code
    return 0;
}

这给出了输出:

percentage = 1000x6580a8

添加更多endl只打印出更多0x6580a8。

可能导致这种情况的原因是什么?这是在Ubuntu 10.04上用gcc 4.4.3编译的。

4 个答案:

答案 0 :(得分:2)

正确编写了该功能。在我的机器上(Ubuntu 10.04上的g ++ 4.4.3)一切顺利。 您确定该错误不是由代码的其他部分引起的吗?

答案 1 :(得分:1)

您的代码完全有效。我怀疑你可能会在代码的其他部分粉碎你的堆栈或堆,这是最可能的原因。 0x6580a8太短而不能成为对象地址。此外,他永远不会在同一个程序的两次运行中获得相同的地址。

答案 2 :(得分:0)

如果您尝试了\ n?

,该怎么办?
std::cout << "percentage = " << percentage  << "\n";

答案 3 :(得分:0)

这是您的实际代码,还是有不同类型的流而不是cout

它使用endl操纵器的地址而不是将其应用于流,这意味着它无法看到您正在使用的流类型的endl的匹配版本。 / p>

如果您使用<< "\n" << std::flush会怎样?