如果变量为零,则不要打印变量

时间:2015-11-04 22:26:31

标签: c++

double a, b, c, d, x, y;
char operation


cout << setw(6) << a << b 
     << setw(3) << operation
     << setw(6) << c << d 
     << " = "
     << setw(6) << x << y 
     << endl;

我正在制作一个计算器,它需要两个复数并添加减法等。我的问题是如何格式化输出以便不显示0。

即。如果输入为(a + bi)(c + di),则输出为+ bi * c + di = x + yi但是a,b,c,d,x,y仅在非零时显示。

我知道我可以用if语句和东西来做,但我希望有更短,更有效的路径。

2 个答案:

答案 0 :(得分:1)

我认为如果非零某处,你可以避免这样做并打印。

关于你所能做的就是把它包起来,这样大多数代码都不需要处理它:

class complex { 
   double x;
   double i;
public:
    // ...

    friend std::ostream &operator<<(std::ostream &os, complex const &c) { 
        // if both parts are 0, we probably want to print *something*
        if (c.x == 0.0 && c.i == 0.0)
            return os << 0;
        if (c.x != 0.0)
            os << c.x;
        if (c.i != 0.0)
            os << c.i << "i";
        return os;
     }
};

complex a, b, c;

// ...
cout << a << operation << b << " = " c << "\n";

如果你想要正确地(例如)正确使用(例如)宽度/精度,你将不得不添加更多(虽然实际使用,你无疑想要使用已经在标准库中的complex类代替)。

答案 1 :(得分:0)

是的,你可以通过加入<complex>

来实现
std::complex<double> com_one; // value 0 + 0i 
std::complex<double> com_two(3.14); // value 3.14 + 0i
std::complex<double> com_three(1.5, 3.14) // value 1.5 + 3.14i 
std::complex<double> com_four(com_two); // value is also 3.14 + 0i

然后使用算术运算,你可以使用

std::cout << com_one + com_two << std::endl; 
std::cout << com_one - 3.14 << std::endl; 
std::cout << 2.75 * com_two << std::endl; 
com_one += com_three / 2.0;

来源:http://stdcxx.apache.org/doc/stdlibug/20-2.html

要检查它是否为零,请使用if进行检查,并将其与零进行比较。这是最干净的技术。