让我举例解释我的问题,我的功能如下:
void printer(int width, int hight){
for(int i=0;i<width;++i) std::cout<<" & ";
for(int i=0;i<hight;++i) std::cout<<" ^ ";
std::cout<<std::endl;
}
我的问题是功能打印机应该始终以相同的宽度输出两个for循环
e.g: 输出可能看起来(宽度5):
&^
&&&^
或者无论如何我打印任何(从上面的代码)for
循环的输出以恒定的宽度独立于for
循环执行
答案 0 :(得分:3)
问题尚不清楚。您在寻找以下内容吗?
void printer(int amps, int carets, int overallWidth){
for (int i = amps + carets; i < overallWidth; i++) std::cout<<" "; // leading padding
for (int i=0;i<amps;++i) std::cout<<"&";
for (int i=0;i<carets;++i) std::cout<<"^";
std::cout<<std::endl;
}
更改只是添加一个用于输出填充的循环。 (为了清晰起见,还更改了参数名称)
printer(1,1,5);
printer(3,1,5);
然后将产生示例中显示的输出
&^
&&&^
当然,不是作为参数传递,而是可以对overallWidth变量进行硬编码; printer()函数的隐式常量。
修改强>:
上面的片段与问题的片段非常接近。然而,更多惯用方法,例如下面的“one liner”,它使用一个字符串构造函数重载来生成重复字符的字符串,并使用iomanip的setw()来生成填充。 / p>
void printer(int amps, int carets, int overallWidth){
std::cout << setiosflags(ios::right) << setw(overalWidth)
<< string(amps, '&') + string (carets, '^')
<< std::endl;
}
答案 1 :(得分:1)
查看<iomanip>
。使用cout
,您可以指定宽度。
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
cout << setiosflags(ios::left) << setw(10) << "Hello"
<< setiosflags(ios::right) << setw(20) << "World!";
return 0;
}