printf 和 scanf 中 %lli 和 %lld 之间的区别?

Moh*_*n66 0 c c++ printf

我和我的朋友正在争论%lli%lld。我一般用%lli, 每次他争辩时都用%lldinprintfscanf。他声称%lli%lld不同。

GNU GCC 编译器中的%lli%lld格式说明符之间有什么区别,还是相同?

til*_*z0R 5

对于 printf,它们完全相同。

http://en.cppreference.com/w/cpp/io/c/fprintf

d,i将有符号整数转换为十进制表示 [-]dddd。

精度指定显示的最小位数。默认精度为 1。如果转换值和精度都为 ?0? 转换结果没有字符。


对于 scanf,它们是不同的。以下是文档中的引用。

d匹配一个十进制整数。数字的格式与 strtol() 预期的相同,基本参数的值为 10

i匹配一个整数。数字的格式与 strtol() 预期的相同,值为 ?0? 对于 base 参数(base 由解析的第一个字符决定)

在 的情况下i,如果您的号码以 开头0,它将被解析为八进制。

http://en.cppreference.com/w/cpp/io/c/fscanf

  • @HariomSingh 如果您可以期待 10 以外的数字,请使用“i”。 (3认同)
  • @HariomSingh:请注意,日期以 10 为基数表示,因此如果您使用 `%i` 和 `scanf()`(因为 8 和 9 都不是八进制数字,因此 0 是一个八进制数,而 8 或 9 是下一个数字)。 (2认同)