c ++ cout с плавающей точкой дает странные результаты - PullRequest
1 голос
/ 14 июля 2010

В настоящее время у меня есть следующее:

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.

Что может быть причиной этого? Это скомпилировано с gcc 4.4.3 в Ubuntu 10.04.

Ответы [ 4 ]

2 голосов
/ 14 июля 2010

Функция написана правильно.На моей машине (g ++ 4.4.3 на Ubuntu 10.04) все работает без сбоев.Вы уверены, что ошибка не вызвана какой-то другой частью кода?

1 голос
/ 14 июля 2010

Ваш код действителен. Я подозреваю, что вы могли бы разбить свой стек или кучу в какой-то другой части вашего кода как наиболее вероятная причина. 0x6580a8 слишком короткий, чтобы быть адресом объекта. Кроме того, он никогда не получит один и тот же адрес при двух запусках одной и той же программы.

0 голосов
/ 14 июля 2010

Это ваш реальный код, или вместо cout?

используется другой тип потока. Он использует адрес манипулятора endl вместо его применения к потоку, что подразумевает, чтоон не может увидеть подходящую версию endl для используемого вами типа потока.

Что произойдет, если вместо этого вы используете << "\n" << std::flush?

0 голосов
/ 14 июля 2010

Что если вы попробовали \ n?

std::cout << "percentage = " << percentage  << "\n";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...