这是我的代码,只是尝试用*
填充空格:
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
cout << setw(10) << setfill('*');
cout << endl;
system("pause");
return 0;
}
然而,程序只显示空白,换句话说它只显示一个空行!
所以,请问,它有什么问题?
注意:我尝试在VS 2015和GCC 4.9.2上编译并获得相同的结果。
答案 0 :(得分:2)
std::endl
是你的操纵者被忽略的原因:
将换行符插入输出序列os并将其刷新 好像通过调用
os.put(os.widen('\n'))
后跟os.flush()
。
第一部分的put
电话是罪魁祸首。您可以减少问题,如下面的实验所示,该实验只会将x
写入输出:
#include <iostream>
#include <iomanip>
int main() {
std::cout << std::setw(10) << std::setfill('*');
std::cout.put('x');
}
问题是put
执行无格式输出:
表现为UnformattedOutputFunction。
修复很简单:不要使用std::endl
。使用"\n"
。 无论如何,你应该更喜欢"\n"
。
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
cout << setw(10) << setfill('*');
cout << "\n";
system("pause");
return 0;
}
这将生成所需的输出:
*********
虽然我们正在努力:
using namespace std
。system("pause")
。return 0
中的main
是多余的。答案 1 :(得分:0)
你需要写一些东西给std :: cout。
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
cout << setw(10) << setfill('*') << "" << std::endl;
cout << setw(10) << setfill('*') << 1 << std::endl;
cout << endl;
system("pause");
return 0;
}
答案 2 :(得分:0)
在填写“*”之前你必须先写一些东西:
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
cout << "test" ;
cout << setw(10) << setfill('*');
cout << "test" ;
cout << endl;
system("pause");
return 0;
}