在C ++中显示对齐的列

时间:2016-09-16 04:21:34

标签: c++

我现在正在做一个项目,我必须显示一系列整数以及列中整数的10%,15%和20%折扣。当数字具有相同数量的字符空间时,这对我来说不是问题,但是该项目混合了诸如5.00和10.00之类的数字。因为10.00包含五个字符空格而5.00包含四个空格,所以它会抛出我的列。我知道这是超级挑剔,但我想解决它。有办法吗?

    #include <iomanip>
    #include <iostream>
    using namespace std;

    int main()
    {
        double number = 0.0;
        double tenp = 0.0;
        double fifp = 0.0;
        double twep = 0.0;

        cout << "Original price" << setw(13) << "10% off" << setw(20) 
             << "15% off"<< setw(20) << "20% off"<<endl;

        for (double number = 5.0; number < 51; number += 5)
        {
            tenp = number - number*.10;
            fifp = number - number*.15;
            twep = number - number*.20;


            cout << fixed<<setprecision(2);
            cout <<"$ " << number << setw(15)<<"$ " 
                << tenp<< setw(15)<<" $ " 
                << fifp<< setw(15) <<"$ "
                << twep << endl;



        }
        return 0;
    }



    Original price      10% off             15% off             20% off
$ 5.00             $ 4.50             $ 4.25             $ 4.00
$ 10.00             $ 9.00             $ 8.50             $ 8.00
$ 15.00             $ 13.50             $ 12.75             $ 12.00
$ 20.00             $ 18.00             $ 17.00             $ 16.00
$ 25.00             $ 22.50             $ 21.25             $ 20.00
$ 30.00             $ 27.00             $ 25.50             $ 24.00
$ 35.00             $ 31.50             $ 29.75             $ 28.00
$ 40.00             $ 36.00             $ 34.00             $ 32.00
$ 45.00             $ 40.50             $ 38.25             $ 36.00
$ 50.00             $ 45.00             $ 42.50             $ 40.00
Press any key to continue . . .

2 个答案:

答案 0 :(得分:1)

您可以尝试使用setfill通过使用空格填充来强制每个数字具有相同的宽度。首先包括标题<iomanip>,然后尝试以下代码:

cout << fixed << setprecision(2);
cout << "$ " << setfill(' ') << setw(13) << number
        "$ " << setfill(' ') << setw(13) << tenp
        "$ " << setfill(' ') << setw(13) << fifp
        "$ " << setfill(' ') << setw(13) << twep << endl;

以相同的间距打印标题,以便一切顺利排列:

cout << setw(15) << "Original price"
     << setw(15) << "10% off"
     << setw(15) << "15% off"
     << setw(15) << "20% off" << endl;

答案 1 :(得分:0)

您也可以查看stream format flags

有一些可能会有所帮助。最简单的可能是用空格填充字符串:

cout.setf(ios::right);