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