【问题标题】:What is the problem with the format specifier C++格式说明符 C++ 有什么问题
【发布时间】:2018-10-01 04:57:16
【问题描述】:

我有以下代码:

#include <cstdio>

int main()
{
    float b = 323.23f;
    std::scanf("%6.3f\n", &b);  // <-- Warning
    std::printf("%6.3f\n", b);
}

scanf() 处有一条警告声明:

无效的转换说明符'.'

这里有什么我遗漏的吗?

【问题讨论】:

    标签: c++ scanf format-specifiers


    【解决方案1】:

    当您将%6.3fprintf 一起使用时,.3 指定输出的精度。

    scanf 不需要您指定精度,因为它会接受在输入流中找到的任何精度。所以你不能以scanf 格式指定.3(或.-anything-else)。只需改用%6f 甚至%f

    【讨论】:

      【解决方案2】:

      scanf 的格式说明符不要求您明确指定小数点后的位数。另外,这是导致警告的原因,最好在 scanf 中使用普通的 %f,尽管 %6f 也可以。

      printf 并非如此。当您使用[some_number].[number_of_places]f 时,例如printf 中的6.3f,而.3f 会影响将显示的小数点后的位数,其中的6 保留许多字符空格来显示整个数字。

      希望这在一定程度上有所帮助。

      【讨论】:

        【解决方案3】:

        C 中的格式说明符不采用值 '6.3'。您可以使用 '%6f' 或简单地使用 '%f'。 '%6.3f' 是导致警告的原因。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-11-27
          • 2014-07-14
          • 1970-01-01
          • 2012-06-22
          • 1970-01-01
          • 2013-02-13
          • 1970-01-01
          相关资源
          最近更新 更多