setw() 和 setfill() 不工作...我做错了什么?
setw() and setfill() not working...what am i doing wrong?
我想做的是打印 double 数据类型,精度为 2,setw(15),用 _(下划线) 和 前缀 - 或 + 填充空格。例如,如果 数字是 2006.008 output 应该是 _______+2006.01
我的代码是:
cin>>b;
if(b>0){
cout<<setw(15)<<setfill('_');
cout<<fixed<<setprecision(2)<<"+"<<b<<endl;
}
else{
cout<<setw(15)<<setfill('_');
cout<<fixed<<setprecision(2)<<"-"<<b<<endl;
}
我得到的输出是:
______________+2006.01
区别: 我的输出有 14 个下划线
但结果应该只有 7 个下划线
我尝试了什么?
没有前缀我的答案是准确的,因为如果我添加前缀 setw(15) 会将我的前缀计为第 15 个字符并在它之前添加 14 个下划线
使用 std::showpos
而不是输出字符串文字 "+"
或 "-"
.
cout<<setw(15)<<setfill('_');
cout<<fixed<<setprecision(2)<<std::showpos<<b<<endl;
否则 std::setw
设置字符串文字的字段宽度 "+"
或 "-"
.
io-manipulators 适用于对流的单次插入。当你插入 "+"
到流中,那么它的宽度是 1
而剩下的 14
被 _
填充,因为 setfill('_')
.
如果您希望 io-manipulators 应用于连接的字符串,您可以连接这些字符串。我在这里使用了一个stringstream,所以你可以应用setprecision
和fixed
:
if(b>0){
std::stringstream ss;
ss << "+" << fixed << setprecision(2) << b;
cout << setw(15) << setfill('_') << s.str() << endl;
我想做的是打印 double 数据类型,精度为 2,setw(15),用 _(下划线) 和 前缀 - 或 + 填充空格。例如,如果 数字是 2006.008 output 应该是 _______+2006.01
我的代码是:
cin>>b;
if(b>0){
cout<<setw(15)<<setfill('_');
cout<<fixed<<setprecision(2)<<"+"<<b<<endl;
}
else{
cout<<setw(15)<<setfill('_');
cout<<fixed<<setprecision(2)<<"-"<<b<<endl;
}
我得到的输出是: ______________+2006.01
区别: 我的输出有 14 个下划线
但结果应该只有 7 个下划线
我尝试了什么?
没有前缀我的答案是准确的,因为如果我添加前缀 setw(15) 会将我的前缀计为第 15 个字符并在它之前添加 14 个下划线
使用 std::showpos
而不是输出字符串文字 "+"
或 "-"
.
cout<<setw(15)<<setfill('_');
cout<<fixed<<setprecision(2)<<std::showpos<<b<<endl;
否则 std::setw
设置字符串文字的字段宽度 "+"
或 "-"
.
io-manipulators 适用于对流的单次插入。当你插入 "+"
到流中,那么它的宽度是 1
而剩下的 14
被 _
填充,因为 setfill('_')
.
如果您希望 io-manipulators 应用于连接的字符串,您可以连接这些字符串。我在这里使用了一个stringstream,所以你可以应用setprecision
和fixed
:
if(b>0){
std::stringstream ss;
ss << "+" << fixed << setprecision(2) << b;
cout << setw(15) << setfill('_') << s.str() << endl;