我尝试使用标准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}}
答案 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 *格式 将不再起作用。