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

时间:2018-10-01 04:57:17

标签: c++ scanf format-specifiers

我有以下代码:

#include <cstdio>

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

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

  

无效的转化说明符'.'

我这里缺少什么吗?

3 个答案:

答案 0 :(得分:8)

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

scanf不需要您指定精度,因为它将接受在输入流中找到的任何精度。因此,您不允许以.3格式指定.(或scanf-其他任何内容)。只需使用%6f甚至是%f

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

C中的格式说明符不使用值“ 6.3”。您可以使用“%6f”或仅使用“%f”。引起警告的原因是“%6.3f”。