gpt4 book ai didi

c++ - 在 C++ 中重置输出标志

转载 作者:太空狗 更新时间:2023-10-29 23:02:31 27 4
gpt4 key购买 nike

我打算在我结束时使用 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;
}

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

最佳答案

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

std::resetiosflags()是一个操纵符,用于表达式,例如 out << resetiosfloags( flags ) .大概你正在做的是传入一个函数指针,它是由 std::operator<< 的重载选择的。它接受一个 bool 值并打印 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 .

关于c++ - 在 C++ 中重置输出标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28257527/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com