gpt4 book ai didi

c++ - 第一个带有 double 的 setw 是左对齐的,随后是右对齐的

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:45:23 28 4
gpt4 key购买 nike

我试图确认我对流如何与 double 和各种操纵器一起工作的知识,并且偶然发现 G++ 做了一些奇怪的事情:

int main() {
double v = 10.0/3.;
//std::cout << v << '\n';
std::cout << std::setw(5) << std::setprecision(2) << v << '\n';
std::cout << std::setw(5) << std::setprecision(2) << std::fixed << v << '\n';
}

输出:

3.3      //why is this left aligned?
3.33 //why is this right aligned? which is right?

See it live here

然后我取消了第一个 cout 的注释并得到了不同的结果!

3.33333 //which alignment is this?
3.3 //now this is right aligned?!
3.33 //that implies right-aligned is correct

随后的测试表明,我流出的第一个 double 是左对齐的,而所有后续的 double 都是右对齐的:

double v = 10.0/3.;
std::cout << std::setw(10) << v << '\n';
std::cout << std::setw(5) << std::setprecision(2) << std::fixed << v << '\n';
std::cout << std::setw(5) << std::setprecision(2) << v << '\n';
std::cout << std::setw(5) << std::setprecision(2) << v << '\n';

输出:

3.33333           //well, this is left aligned
3.33
3.3
3.3 //all subsequent tests are right aligned

Coliru 上的 Clang++ 也在做同样的事情,我猜是因为他们使用的是同一个库。

我知道“这是 G++ 错误吗”的答案在 99.9% 的情况下都不是,所以有人可以解释我所看到的行为吗?

最佳答案

在其他 IDE 上运行后,我得出结论,这不是 g++/clang++ 的问题,也不是任何标准行为的问题,而是 Coliru 编辑器本身的问题。我在几个不同的网站上运行了这个,包括 RextesterIdeone我得到了所有这些的正确输出。这似乎是只属于 Coliru 编辑器的问题。

默认情况下,流是右对齐的。使用 std::setw() 设置宽度时,流会将 out.fill() 指定的填充字符插入输出的开头(或结尾)溪流。我注意到,当流使用默认填充字符(一个简单的空格)时,Coliru 不会在 first 输出操作上添加任何填充字符。但是当我将填充字符更改为空格以外的任何字符时,it works就好了。

关于c++ - 第一个带有 double 的 setw 是左对齐的,随后是右对齐的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22545721/

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