C ++如果值为零,则避免将变量传递给std :: cout

时间:2016-08-20 15:29:23

标签: c++ cout

假设我有一个变量double x,作为一些计算的结果,可以有任何值,包括零,我需要将它传递给std::cout。如果其值为零,如何避免打印x

例如,如果1+<value_of_x>,则会打印x,否则只会打1

std::cout << (x ? "1+" : "1") << x << '\n';

有没有办法为x做同样的事情?像下面的废话一样:

std::cout << (x ? ("1+" << x) : "1") << '\n';

我应该补充一点,我在C ++方面并不高级。

3 个答案:

答案 0 :(得分:3)

你可以说

std::cout << (x ? "1+" + std::to_string(x) : "1") << '\n';

但是

if (x)
    std::cout << "1+" << x << '\n';
else
    std::cout << "1" << '\n';

可能更具可读性 (我认为这主要取决于个人偏好。)

答案 1 :(得分:1)

如果x为0,请勿打印:

if (x != 0)
    std::cout << x << '\n';

任何进一步的变化都应该是不言而喻的。

答案 2 :(得分:1)

使用if语句将是一种简单易读的方法:

if (x)
    std::cout << "1+" << x;
else
    std::cout << "1";
std::cout << '\n';

甚至:

std::cout << "1";
if (x) std::cout << "+" << x;
std::cout << '\n';

但是,如果您确实要打印内联值,则可以定义自定义operator<<来格式化值,但需要:

struct to_coefficient_str
{
    double m_value;

    to_coefficient_str(double value) : m_value(value) {}

    void print(std::ostream &out) const
    {
        out << "1";
        if (m_value)
            out << "+" << m_value;
    }
};

std::ostream& operator<<(std::ostream &out, const to_coefficient_str &ce)
{
    ce.print(out);
    return out;
}

然后你可以像这样使用它:

std::cout << to_coefficient_str(x) << '\n';