c ++如何将输出与for循环对齐

c++ how to align output with for loop

我正在处理一个学校项目,当我 运行 程序时,它需要提供有组织的输出。我试图将它与右侧对齐,但它显然无法正常工作可见。我怎样才能达到预期的输出?

代码:

for (int i = 0; i < 5; i++) {

        std::cout << i + 1 << "." << "\t" << std::setw(20) << std::right << "White Knight" << std::setw(30);

        if (i < 3) {
            std::cout << "W:" << 3 << " ";
            std::cout << "G:" << 4 << " ";
            std::cout << "B:" << 5 << " ";
            std::cout << "R:" << 6 << " ";
            std::cout << "L:" << 7 << " ";
            std::cout << "CMC:" << 8 << std::endl;
        }
        else {
            std::cout << "No Cost(Gives 1 G Mana)" << std::endl;
        }

        printf("\t");
        std::cout << std::setw(30) << "HP: " << 10 << " Attack Power:" << 30 << "   Ability: " << "First Strike";
        
    }

预期输出:

          Card                           Mana Cost                          Card Info

1.        White Knight                   W:3 G:4 B:5 R:6 L:7 CMC:8          HP:10   Attack Power:20  Ability:First Strike 
2.        White Knight                   W:3 G:4 B:5 R:6 L:7 CMC:8          HP:10   Attack Power:20  Ability:First Strike 
3.        White Knight                   W:3 G:4 B:5 R:6 L:7 CMC:8          HP:10   Attack Power:20  Ability:First Strike 
4.        White Knight                   No Cost(Gives 1 G Mana)            HP:10   Attack Power:20  Ability:First Strike 
5.        White Knight                   No Cost(Gives 1 G Mana)            HP:10   Attack Power:20  Ability:First Strike 

我得到了什么:

1.              White Knight                            W:3 G:4 B:5 R:6 L:7 CMC:8
                                  HP: 10        Attack Power:30 Ability: First Strike2.         White Knight                            W:3 G:4 B:5 R:6 L:7 CMC:8
                                  HP: 10        Attack Power:30 Ability: First Strike3.         White Knight                            W:3 G:4 B:5 R:6 L:7 CMC:8
                                  HP: 10        Attack Power:30 Ability: First Strike4.         White Knight       No Cost(Gives 1 G Mana)
                                  HP: 10        Attack Power:30 Ability: First Strike5.         White Knight       No Cost(Gives 1 G Mana)
                                  HP: 10        Attack Power:30 Ability: First Strike

检查一下并将其与您的代码进行比较。我刚刚添加和删除了几个 endl,在 else 块中添加了一个 setw(36) 并重新修改了一些 space 序列

for (int i = 0; i < 5; i++) {

    std::cout << i + 1 << "." << "\t" << std::setw(15) << std::right << "White Knight" << std::setw(15);

    if (i < 3) {
        std::cout << "W:" << 3 << " ";
        std::cout << "G:" << 4 << " ";
        std::cout << "B:" << 5 << " ";
        std::cout << "R:" << 6 << " ";
        std::cout << "L:" << 7 << " ";
        std::cout << "CMC:" << 8;
    }
    else {
        std::cout << setw(36) << "No Cost(Gives 1 G Mana)";
    }

    printf("\t");
    std::cout << std::setw(10) << "HP: " << 10 << " Attack Power:" << 30 << "   Ability: " << "First Strike" << endl;

}

输出

1.         White Knight             W:3 G:4 B:5 R:6 L:7 CMC:8         HP: 10 Attack Power:30   Ability: First Strike
2.         White Knight             W:3 G:4 B:5 R:6 L:7 CMC:8         HP: 10 Attack Power:30   Ability: First Strike
3.         White Knight             W:3 G:4 B:5 R:6 L:7 CMC:8         HP: 10 Attack Power:30   Ability: First Strike
4.         White Knight             No Cost(Gives 1 G Mana)           HP: 10 Attack Power:30   Ability: First Strike
5.         White Knight             No Cost(Gives 1 G Mana)           HP: 10 Attack Power:30   Ability: First Strike