我永远无法理解如何在 C 中打印 unsigned long
数据类型。
假设 unsigned_foo
是 unsigned 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
。
%lu
是 unsigned long
的正确格式。听起来这里还有其他问题,例如内存损坏或未初始化的变量。也许向我们展示一张更大的图片?
对于 int %d
对于 long int %ld
对于 long long int %lld
对于 unsigned long long int %llu
%lu 表示无符号长
%llu 为 unsigned long long
在您尝试的所有组合中,%ld
和 %lu
是唯一有效的 printf 格式说明符。 %lu
(长无符号十进制)、%lx
或 %lX
(带有小写或大写字母的长十六进制)和 %lo
(长八进制)是 unsigned long 类型变量唯一有效的格式说明符(当然您可以在 %
和 l
之间添加字段宽度、精度等修饰符)。
printf
被指定为需要完全正确的参数类型,而没有 va_arg
所具有的余量。
int main()
{
unsigned long long d;
scanf("%llu",&d);
printf("%llu",d);
getch();
}
这会很有帮助。 . .
格式为 %lu
。
请检查 printf here 中的各种其他数据类型及其用法
unsigned long 的正确说明符是 %lu
。
如果您没有得到您期望的确切值,那么您的代码中可能存在一些问题。
请在此处复制您的代码。那么也许有人可以更好地告诉你问题是什么。
%lu
这次成功了。谢谢。以前肯定发生过其他事情,但没有奏效。%lu
时,printf 也不应该达到可以打印减号的程度。从技术上讲,这是未定义的行为,但实际上该变量具有不可预测的值,该值被传递给 printf,然后 printf 将其解释为无符号。我猜 bodacydo 最初的问题是流程到达了不正确的 printf 调用,而不是预期的调用......%lu
,分解为:%
— 启动“转换规范”;l
— 长度修饰符,l
表示“[unsigned] long int”;u
— 转换说明符,u
用于将unsigned int
打印为十进制。因为我们给出了长度修饰符l
,所以它接受一个unsigned long int
。字母必须按以下顺序排列:百分比、长度、转换。 (您可以添加更多选项,例如宽度和精度。参见手册页,因为它精确地记录了所有这些!)