1

考虑这段代码:

int xx;
std::cin >> std::setfill('0') >> std::setw(4) >> xx;

发送12到标准输入时,我期望值为xx1200发送时12345我期望值为1234

但是,它似乎std::setfillstd::setw没有效果,我分别得到了1212345

这是一个错误还是根据标准?有没有获得预期功能的好方法?

另请注意,当我将类型更改为生效xx但仍然没有生效时。std::stringstd::setwstd::setfill

我的编译器是gcc-7.0.1.

4

2 回答 2

2

根据 C++ 标准,setfill属于输出流。至于,它与orsetw一起使用时适用于输入流。例如,输入字符串(和)的以下程序输出:char*stringabcdabcdef1234123456

string a;
cin >> setw(4) >> a;
cout << a;
于 2017-03-01T11:42:26.743 回答
0

setw并且setfill没有如此普遍地应用。

听起来您想模仿在固定宽度列中格式化给定输入的效果,然后重新读取它。该库确实为此提供了工具:

int widen_as_field( int in, int width, char fill ) {
    std::stringstream field;
    field << std::setw( width ) << std::setfill( fill );
    field << std::setiosflags( std::ios::left );
    field << in;
    int ret;
    field >> ret;
    return ret;
}

演示

但是,此功能不会修剪123451234。这将需要通过string.

于 2017-03-01T11:40:28.637 回答