【问题标题】:Why doesn't setw(n) work here?为什么 setw(n) 在这里不起作用?
【发布时间】:2015-01-25 23:10:06
【问题描述】:

这是我的问题:

给定三个已经声明和初始化的 double 类型的变量 a、b、c,编写一些代码,将它们中的每一个都打印在同一行的 15 个位置字段中,这样科学(或 e -符号或指数符号)被避免。每个数字应在小数点右侧打印 5 位数字。例如,如果它们的值为 24.014268319、14309、0.00937608,则输出为:

|xxxxxxx24.01427xxxx14309.00000xxxxxxxx0.00938

注意:竖线,| ,左上角代表打印区域的左边缘;不能打印出来。此外,我们在上面的输出中显示 x 来表示空格——您的输出实际上不应该有 x!

这实际上是我想要做的:

cout << fixed << setprecision(5) << 24.014268319 << setw(5) << 5252.25151516 << endl;

但这会产生以下输出:

24.014275252.25152

显然我没有解释如何正确使用setw(n),有没有人看到我在这里做错了什么?

【问题讨论】:

  • 你期待什么输出?您发送给cout 的第二个号码不在问题陈述中,您在第一个和第二个号码之间输出一个空格。
  • 你不应该说setw(15)吗?
  • @CaptainObvlious 产生的数字是随机的,所以我只是提供了一个随机数。我期待24.01427 5252.25152
  • @rodrigo,这解决了我的问题,但为什么 setw(5) 不在数字之间提供任何空格?
  • 尝试在第一个数字前使用setw(15)

标签: c++ setw


【解决方案1】:

setw(...) I/O 操纵器有点棘手,因为它的效果正在重置,即在每次调用 << 之后将宽度设置回零(以及在 documentation 中描述的其他内容) )。

你需要多次调用setw(15),像这样:

cout << fixed << setprecision(5) << setw(15) << 24.014268319  << setw(15) << 5252.25151516 << endl;

Demo.

【讨论】:

    猜你喜欢
    • 2013-05-16
    • 2019-02-10
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多