【问题标题】:How can you use std::setw() with array output?如何将 std::setw() 与数组输出一起使用?
【发布时间】:2021-12-02 09:31:53
【问题描述】:

我正在用 C++ 制作一个二十一点游戏,我试图打印出玩家和庄家牌以及他们的金额、资本等。但是,在打印出卡片矢量时,我遇到了std::setw() 的问题。这是一个代码sn-p:

    int width = 18;
    std::cout << std::left << std::setw(width) << "Your cards:";
    std::cout << std::left << std::setw(width * 2) << "arr";
    std::cout << std::left << std::setw(width) << "Dealers cards:";
    std::cout << "arr2" << std::endl;

    std::cout << std::left << std::setw(width) << "Your sum:";
    std::cout << std::left << std::setw(width*2) << player.sum();
    std::cout << std::left << std::setw(width) << "Dealers sum:";
    std::cout << dealer.sum() << std::endl;

arrarr2 应该有像5 2 6 1 这样的数字值,但如果我分别打印每个元素,则 with 对齐会中断。我认为setw() 要工作,它需要是一个块或字符串,否则一旦值发生变化,垂直对齐就会混乱。我为每个向量值尝试了myString.push_back(),然后打印了它,但没有运气。我假设我需要找到一种方法将字符串打印到一个元素中。

它应该是这样的:

Your cards:     5 7 1 2                 Dealers cards:     2 1 7 5
Your sum:       21                      Dealers sum:       21
Your capital:   100                     Dealers capital:   100

【问题讨论】:

  • 两列之间的空格是否正好是空格数有关系吗?您只能在打印数组中的最后一个数字时应用std::setw
  • 没关系,但接下来的问题是宽度数应该是多少 - 请记住,数组可以跨越 2 - 6 个或更多数字。重要的是柱子是直的。

标签: c++ vector console cout


【解决方案1】:

我找到了解决办法。您可以使用 stringstream 将 int 值添加到转换中没有错误的字符串,这就是我修复代码的方式:

#include <sstream>
std::stringstream playerCards{};

for (int i{}; i < player.cards.size(); i++) {
    playerCards << player.cards[i] << " ";
}

int width = 18;
std::cout << std::left << std::setw(width) << "Your cards:";
std::cout << std::left << std::setw(width * 2) << playerCards.str();

这样,数组将被放入一个字符串中并计为一个块,这正是我所寻找的。​​p>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多