我有以下代码:
#include <cstdio>
int main()
{
float b = 323.23f;
std::scanf("%6.3f\n", &b); // <-- Warning
std::printf("%6.3f\n", b);
}
scanf()
处有一条警告,指出:
无效的转化说明符
'.'
我这里缺少什么吗?
答案 0 :(得分:8)
将%6.3f
与printf
一起使用时,.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”。