每当我尝试在C ++中使用setfill操纵器时,它只显示空白

时间:2016-10-24 07:03:12

标签: c++ visual-c++

这是我的代码,只是尝试用*填充空格:

#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上编译并获得相同的结果。

3 个答案:

答案 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;
}