错误:未知的转换类型字符' l'格式 - 扫描很长

时间:2014-05-18 02:53:08

标签: c scanf c99

我尝试使用标准IO函数long long从控制台获取scanf。我从%lld开始:

scanf("%lld", &rule);

投掷:

error: unknown conversion type character 'l' in format [-Werror=format=]

我找到了more workarounds,但他们也错了:

 scanf("%I64d", &rule);
   ->error: ISO C does not support the 'I64' ms_scanf length modifier [-Werror=format=]
 scanf("%"SCNd64"", &rule);
   ->error: expected ')' before 'SCNd64'

我做错了吗?还有另外一招吗?

我使用这些标志在最新版本的MinGw GCC上进行编译:{{1​​}}

2 个答案:

答案 0 :(得分:4)

对于SCNd64和类似的

,您必须使用

#include <inttypes.h>

但是如果你的编译器支持C99,那么所有这些都应该可行。您的第一条错误消息强烈表明它没有,或者您没有给出正确的命令行开关。

答案 1 :(得分:0)

也只想添加此代码段:

MinGW-w64 - for 32 and 64 bit Windows / [Mingw-w64-public] -Wformat and %llu

  

问题是格式器宽度说明符%ll不支持   所有msvcrt-DLL版本,因此gcc警告其使用。的   用于在格式化程序中指定64位整数标量宽度的变体   向后兼容的方法是使用%I64。

     

在Windows上使用%I64u,或仅使用inttypes.h PRIuMAX。

     

如果必须使用%llu,请在之前定义__USE_MINGW_ANSI_STDIO宏   包括stdio.h。请注意,如果执行此操作,则MS输入%I64 *格式   将不再起作用。