3

我打算在我结束使用的行上将所有输出标志重置为默认值resetiosflags函数的行上将所有输出标志重置为默认值。当我尝试以这种方式执行此操作时,它提供了错误的输出,这与我的预期相反。

#include <iostream>
#include <iomanip>
using namespace std;
int
main()
{
    bool first;
    int second;
    long third;
    float fourth;
    float fifth;
    double sixth;

    cout << "Enter bool, int, long, float, float, and double values: ";
    cin >> first >> second >> third >> fourth >> fifth >> sixth;
    cout << endl;

// ***** Solution starts here ****
    cout << first << " " << boolalpha << first  << endl << resetiosflags;
    cout << second << " " << showbase << hex << second << " " << oct << second << endl << resetiosflags;
    cout << third << endl;
    cout << showpos << setprecision(4) << showpoint << right << fourth << endl << resetiosflags;
    cout << scientific << fourth << endl << resetiosflags;
    cout << setprecision(7) << left << fifth << endl << resetiosflags;
    cout << fixed << setprecision(3) << fifth << endl << resetiosflags;
    cout << third << endl;
    cout << fixed << setprecision(2) << fourth << endl << resetiosflags;
    cout << fixed << setprecision(0) << sixth << endl << resetiosflags;
    cout << fixed << setprecision(8) << fourth << endl << resetiosflags;
    cout << setprecision(6) << sixth << endl << resetiosflags;
// ***** Solution ends here ****

    cin.get();
    return 0;
}

我已知的替代方法是通过重述它们来单独取消标记它们,但这似乎是多余的。

4

1 回答 1

1
/*unspecified*/ resetiosflags( std::ios_base::fmtflags mask );

std::resetiosflags()是一个操纵器,旨在用于诸如 的表达式中out << resetiosfloags( flags )。大概您正在做的是传入一个函数指针,该指针由它的重载选择,std::operator<<它需要一个布尔值并打印 1。

但是std::resetiosflags()将格式标志作为无法控制精度的参数。std::ios_base::boolalpha但是可以:

std::cout << ... << std::resetiosflags(std::ios_base::boolalpha);

还有std::noboolalpha

std::cout << ... << std::noboolalpha;

但是,如果您需要将精度重置为其默认值,您可以为此创建自己的操纵器。您还可以使用Boost IO State Saver

于 2015-01-31T23:12:19.927 回答