格式说明符 C++ 有什么问题

What is the problem with the format specifier C++

我有以下代码:

#include <cstdio>

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

scanf() 处有一条警告指出:

Invalid conversion specifier '.'

我在这里遗漏了什么吗?

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

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

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

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

希望对您有所帮助。

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