假设我有一个变量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 ++方面并不高级。
答案 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';