【问题标题】:c++ how to align output with for loopc ++如何将输出与for循环对齐
【发布时间】:2021-05-27 20:07:01
【问题描述】:

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

代码:

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

【问题讨论】:

  • std::setwstd::justifystd::left
  • 看起来您只需要重新考虑您将std::endls 放在哪里。 std::cout &lt;&lt; "CMC:" &lt;&lt; 8 &lt;&lt; std::endl; 将在您想要成为单行的中间轻拍。
  • 谢谢我改了,但还是不好看。
  • 这就是 printf 的设计目的。您可以打印一个字符串,例如10 个字符宽,由“%10s”填充。它来自 C,但在格式化字符串时仍然非常有用。
  • 如果我没记错的话,std::setw(30) 会影响"W:",使其 2 个字符占用 30 个字符。我不认为那是你想要的。

标签: c++ output


【解决方案1】:

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

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

【讨论】:

  • 非常感谢。您的代码完全按照我的要求给出了输出。
猜你喜欢
  • 1970-01-01
  • 2012-04-10
  • 1970-01-01
  • 2020-05-31
  • 1970-01-01
  • 2019-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多