根据我的理解,setw(n)通过创建n个字符的宽度来起作用。另一方面,setfill(' x')允许我们打印n个x个字符。
我想要获得两排星星,如下:
**************************************
Woohoo stars!
**************************************
另外,我想在字符串的两边创建两条长度相等的点,如下所示:
....................... TEAR HERE .......................
相反,我得到的是这样的东西:
Woohoo stars!
**************************************
.............. TEAR HERE .............................
为了实现这些目标,我使用下面的代码#include<iomanip>
(注意:它正在打印到外部.txt文件中):
//goal 1
outfile << setw(40)<<setfill('*') << endl;
outfile<< "Woohoo stars!" << endl;
outfile << setw(40)<<setfill('*') << endl;
//goal 2
outfile <<setfill('.')<< setw(30) " TEAR HERE " << setfill('.')<< setw(30) <<endl;
我试图故意颠倒setw
和setfill
的顺序,但在编译后产生了相同的效果。此外,对于星形图案,由于某种原因,顶行甚至不会输出。最后,我确保在一个新行上执行这些命令,因此不会有任何其他干扰它们所在的行。
答案 0 :(得分:3)
不,setw(n)
不会“创建n个字符的宽度”,它会使用指定的填充字符将下一个打印的项目填充到n个宽度。您仍然可以通过打印空字符串使其按预期工作:
outfile << setw(40)<<setfill('*') << "" << endl;
答案 1 :(得分:2)
setw
实际上只是设置写入流的下一个东西的宽度,因此“Tear Here”将在宽度为30的字段中右对齐。
解决方案是使用:
outfile <<setfill('.')<< setw(30) << '.' << " TEAR HERE " << setfill('.')<< setw(30) << '.' <<endl;