我正在尝试使用std::cout
以及setw
和setfill
来解决C ++中的this问题
我的原始代码是这样的:
void staircase(int n) {
for(int i = 0; i < n; i++) {
cout << setfill(' ') << setw(n-(i+1));
cout << setfill('#') << setw(i+1) << '#'<< endl;
}
}
这不会打印出右对齐#
字符的空格。我将其添加到输出缓冲区cout << setfill(' ') << setw(n-(i+1)) << ' ';
中,它打印空格字符,但是对于最后一行,它打印空格字符。
setw
中是否缺少我的东西?
答案 0 :(得分:1)
您需要打印出一些内容,或者第二个setfill
和setw
替换第一个。例如:
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
void staircase(int n) {
for(int i = 0; i < n; i++) {
cout << setfill(' ') << setw(n-(i+1)) << '|';
cout << setfill('#') << setw(i+1) << '#'<< endl;
}
}
int main(void)
{
staircase(4);
}
打印出
|#
|##
|###
|####
您所需要做的就是打印出比|更有用的内容(例如#),并修正对齐数学。
答案 1 :(得分:-1)
这个问题的一个很好的解决方案是使用字符串类的默认构造函数,如下所示:
for (int i = 0; i < n; i++)
{
int j = i+1;
string spaces(n-j, ' ');
string hashes(j, '#');
cout << spaces + hashes << endl;
}