ChatGPT解决这个技术问题 Extra ChatGPT

如何在 C 中打印“unsigned long”?

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

假设 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


T
Thanatos

%luunsigned long 的正确格式。听起来这里还有其他问题,例如内存损坏或未初始化的变量。也许向我们展示一张更大的图片?


糟糕,%lu 这次成功了。谢谢。以前肯定发生过其他事情,但没有奏效。
@bodacydo:如果您有错误,它可能会以半随机的形式出现......在尝试打印之前确保您的变量具有有效值。
即使变量未初始化,当格式说明符为 %lu 时,printf 也不应该达到可以打印减号的程度。从技术上讲,这是未定义的行为,但实际上该变量具有不可预测的值,该值被传递给 printf,然后 printf 将其解释为无符号。我猜 bodacydo 最初的问题是流程到达了不正确的 printf 调用,而不是预期的调用......
@Anisha Kaul: %lu 是有效的转换规范, %ul 不是。 %lu,分解为: % — 启动“转换规范”; l — 长度修饰符,l 表示“[unsigned] long int”; u — 转换说明符,u 用于将 unsigned int 打印为十进制。因为我们给出了长度修饰符 l,所以它接受一个 unsigned long int。字母必须按以下顺序排列:百分比、长度、转换。 (您可以添加更多选项,例如宽度和精度。参见手册页,因为它精确地记录了所有这些!)
%ul 将只打印无符号(使用 %u),然后逐字打印字母“l”。正如“%uw”将打印无符号,后跟字母“w”。 % 开始 convspec,u(或其他字符,如 d、s、c ...)结束它。
L
Linkon

对于 int %d

对于 long int %ld

对于 long long int %lld

对于 unsigned long long int %llu


n
nIcE cOw

%lu 表示无符号长

%llu 为 unsigned long long


尤达约定:“unsigned long”“(l)ong (u)nsigned”是。
R
R.. GitHub STOP HELPING ICE

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


%ld 将正常工作,直到 std::numeric_limits::max()/2 的值。高于 %ld 将打印错误值(负值)。
@KaushikAcharya:不,上面是UB。在此之前甚至可以说是 UB,因为 printf 被指定为需要完全正确的参数类型,而没有 va_arg 所具有的余量。
J
Jason Sundram
int main()
{
    unsigned long long d;
    scanf("%llu",&d);
    printf("%llu",d);
    getch();
}

这会很有帮助。 . .


w
whoan

格式为 %lu

请检查 printf here 中的各种其他数据类型及其用法


那里记录了各种非标准行为,但没有将其标记为非标准行为。 POSIX 是最容易访问的 printf 在线标准;超出 ISO C 的扩展都标有“CX”标签:opengroup.org/onlinepubs/9699919799/functions/fprintf.html
w
wizzwizz4

unsigned long 的正确说明符是 %lu

如果您没有得到您期望的确切值,那么您的代码中可能存在一些问题。

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