如何在C中打印"unsigned long"?

bod*_*ydo 319 c printf unsigned format-specifiers long-integer

我永远无法理解如何unsigned long在C中打印数据类型.

假设unsigned_foounsigned long,然后我尝试:

  • printf("%lu\n", unsigned_foo)
  • printf("%du\n", unsigned_foo)
  • printf("%ud\n", unsigned_foo)
  • printf("%ll\n", unsigned_foo)
  • printf("%ld\n", unsigned_foo)
  • printf("%dl\n", unsigned_foo)

而且他们都打印了某种-123123123数字而不是unsigned long我的数字.

Tha*_*tos 474

%lu是正确的格式unsigned long.听起来这里还有其他问题,例如内存损坏或未初始化的变量.或许可以向我们展示更大的图景

  • 哎呀,`%lu`这次工作了.谢谢.之前必须发生的其他事情并没有奏效. (10认同)
  • @Anisha Kaul:%lu是有效的转换规范,%ul不是.`%lu`,分解为:`%` - 启动"转换规范"; `l` - 长度修饰符,`l`表示"[unsigned] long int"; `u` - 转换说明符,`u`用于`unsigned int`打印为十进制.因为我们给了长度修饰符`l`,然后它接受一个`unsigned long int`.字母*必须*按顺序排列:百分比,长度,转换.(您可以添加更多选项,例如宽度和精度.*请参阅手册页*,因为它准确记录了所有这些!) (7认同)
  • %ul 将仅打印无符号(使用 %u),然后逐字打印字母“l”。正如“%uw”将打印无符号,后跟字母“w”。% 开始 convspec,u (或其他一些字符,如 d、s、c...)结束它。 (2认同)

小智 28

  • %lu无符号长
  • %llu对于unsigned long long

  • Yoda惯例:"unsigned long""(l)ong(u)nsigned"是. (10认同)

R..*_*R.. 23

在您尝试的所有组合中,%ld并且%lu是唯一有效的printf格式说明符.%lu(长无符号十进制),%lx%lX(带有小写或大写字母的长十六进制)和%lo(长八进制)是unsigned long类型变量的唯一有效格式说明符(当然,您可以在之间添加字段宽度,精度等修饰符)%l).

  • %ld 将正常工作,直到 std::numeric_limits<unsigned long>::max()/2 的值。高于 %ld 将打印错误值(负值)。 (2认同)
  • @KaushikAcharya:不,上面是UB。在此之前它甚至可以说是 UB,因为 `printf` 被指定为需要完全正确的参数类型,而没有 `va_arg` 会有的允许。 (2认同)

Lin*_*kon 23

对于int %d

对于长int %ld

对于长期的int %lld

对于unsigned long long int %llu


Pra*_*n S 9

格式是%lu.

请在此处查看 printf中的各种其他数据类型及其用法

  • 在那里记录了各种非标准行为,而没有将其标记为非标准行为.POSIX是printf最易于访问的在线标准; ISO C以外的扩展名标有"CX"标记:http://www.opengroup.org/onlinepubs/9699919799/functions/fprintf.html (2认同)

San*_*tan 9

int main()
{
    unsigned long long d;
    scanf("%llu",&d);
    printf("%llu",d);
    getch();
}
Run Code Online (Sandbox Code Playgroud)

这会很有帮助...


Kum*_*lok 8

unsigned long的正确说明符是%lu.

如果您没有得到预期的确切值,那么您的代码可能会出现一些问题.

请在此处复制您的代码.那么也许有人可以更好地告诉你问题是什么.