gpt4 book ai didi

c++ - C++中cout的问题

转载 作者:行者123 更新时间:2023-12-01 14:36:32 26 4
gpt4 key购买 nike

首先,我想在下面向您展示我的代码。

#include<iostream>

int main()
{
float num = 3;
std::ios_base::fmtflags initial;
initial = std::cout.setf(std::ios_base::fixed);
std::cout.setf(initial);
std::cout<<num;
}

输出为 3.000000。只有第一行和最后一行输出是 3。我的书说“setf() 方法返回在打电话了。 std::ios_base::fmtflags 是存储此类型所需的奇特名称信息。所以对 initial 的分配存储了之前的设置调用了 setf 函数。然后可以将初始变量用作 setf() 的参数,以将所有格式设置重置为该原始值。”但如您所见,它不起作用。问题出在哪里?

最佳答案

来自 std::ios_base::setf :

fmtflags setf( fmtflags flags );(1)
fmtflags setf( fmtflags flags, fmtflags mask );(2)
Sets the formatting flags to specified settings.

  1. Sets the formatting flags identified by flags. Effectively the following operation is performed fl = fl | flags where fl defines the state of internal formatting flags.
  2. Clears the formatting flags under mask, and sets the cleared flags to those specified by flags. Effectively the following operation is performed fl = (fl & ~mask) | (flags & mask) where fl defines the state of internal formatting flags.

(强调是我的。)

因此,std::ios::setf() 是设置单个标志的好选择,但一次设置所有标志是一个糟糕的选择。

为此,std::ios_base::flags是正确的工具:

fmtflags flags() const;(1)
fmtflags flags( fmtflags flags );(2)
Manages format flags.

  1. returns current formatting setting

  2. replaces current settings with given ones.

示例:

#include<iostream>

int main()
{
float num = 3;
std::cout<<num<<'\n';
std::ios_base::fmtflags initial;
initial = std::cout.setf(std::ios_base::fixed);
std::cout.flags(initial); // <-- the fix
std::cout<<num<<'\n';
}

输出:

3
3

Live Demo on coliru

关于c++ - C++中cout的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63485203/

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