【问题标题】:Dots in printf in C++C ++中printf中的点
【发布时间】:2015-11-26 15:48:15
【问题描述】:

我遇到了这个 sn-p 但不明白它是如何工作的,尤其是 printf 语句。谁能解释一下

void remove_trailing_zeroes()
{
    int a,b; 
    bool f1,f2;
    f1=a%2;
    f2=b%2;
    if (f1==f2) {
        printf("%.0lf\n",(a*1.+b)/2.);
    }
    else {
        printf("%.1lf\n",(a*1.+b)/2.);
    }

}

编辑:我已经改写了我的问题,请帮助我改进它

【问题讨论】:

  • 请澄清您的具体问题或添加其他详细信息以准确突出您的需要。正如目前所写的那样,很难准确地说出你在问什么。请参阅How to Ask page 以获得澄清此问题的帮助。
  • 不明白什么是工作原理?您没有确定有问题的线路。这是你自己写的,还是别人的代码?
  • 首先,有未初始化的值,所以这是错误的。
  • 那段特定的代码是未定义的,因为它使用了未初始化的变量,所以它根本不起作用。您需要更可靠的 sn-p 源。
  • EDIT: I have rephrased my question 但是代码仍然是错误的。 printf 行有什么不清楚的地方? ...也许您应该说出您想要实现的目标,而不是发布无意义的错误代码。

标签: c++ c++11


【解决方案1】:

如果您对这里的点感到困惑,它们是什么:

  • %.1lf 是精度的格式规范。这是在printf 输出中请求小数点后一位。
  • (a*1.+b)/2. 中的 1. 和 2. 表示这些文字是 double(与 1 相对的是 int 和 1.f 将是 float)。编写 sn-p 的人可能试图避免在计算该平均值时被截断(假设 a 和 b 是 int)。

【讨论】:

    【解决方案2】:

    听起来像:

    printf("%g", (a+b)/2.);
    

    仿真。

    【讨论】:

      【解决方案3】:

      看起来它打印了a 和b 之间的平均值。

      这 if 决定结果何时需要小数点 .5:

      bool f1,f2;
      f1=a%2;
      f2=b%2;
      if (f1==f2)
      

      最好直接写:

      // get a and b from somewhere
      if ((a+b)%2) // check if sum can be divided by 2
          printf("%.1lf\n",(a+b)/2.); // %.1lf will print value with 1 decimal ("xX.X")
      else
          printf("%.0lf\n",(a+b)/2.); // %.0lf will print value without decimals ("xX")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-14
        • 2019-08-31
        • 1970-01-01
        • 2015-05-23
        • 2017-03-21
        • 2019-04-06
        • 2021-09-16
        • 2015-06-26
        相关资源
        最近更新 更多