2017-04-19 28 views
0

从我的理解,setw(n)通过创建n个字符的宽度行为。另一方面,setfill('x')允许我们打印n个x字符。C++:setw和setfill行为不可预测

我试图让星两行,像这样:

************************************** 
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; 

我试图扭转setwsetfill故意的顺序,但它造成了同样的效果编译完成后。此外,对于星形图案,由于某种原因,顶行甚至不会输出。最后,我确定要在一条新线上完成这些命令,所以不会有任何干扰他们线路的事情。

+0

除非你需要额外的东西,否则不要使用'std :: endl'。 ''\ n''结束一行。 –

回答

2

setw实际上只是设置的写入流接下来的事情宽度,因此,“撕裂这里”将是正确的宽度30

解决方案的领域排列是使用:

outfile <<setfill('.')<< setw(30) << '.' << " TEAR HERE " << setfill('.')<< setw(30) << '.' <<endl; 
3

否,setw(n)不会“创建n个字符的宽度”,它会使用指定的填充字符将下一个打印项填充到n个宽度。你仍然可以像打印空字符串一样使其工作:

outfile << setw(40)<<setfill('*') << "" << endl; 
+0

谢谢,希望我可以选择你的和马特的答案。 – Matt

相关问题