【问题标题】: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.3f 与printf 一起使用时,.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' 是导致警告的原因。