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语句和东西来做,但我希望有更短,更有效的路径。
答案 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
进行检查,并将其与零进行比较。这是最干净的技术。