如何打印F";无符号长“;在C中?
我永远无法理解如何在C中打印如何打印F";无符号长“;在C中?,c,printf,long-integer,unsigned,format-specifiers,C,Printf,Long Integer,Unsigned,Format Specifiers,我永远无法理解如何在C中打印无符号long数据类型 假设unsigned_foo是一个unsigned long,那么我尝试: printf(“%lu\n”,unsigned\u foo) printf(“%du\n”,未签名的\u foo) printf(“%ud\n”,unsigned\u foo) printf(“%ll\n”,unsigned\u foo) printf(“%ld\n”,未签名) printf(“%dl\n”,unsigned\u foo) 它们都打印了某种类型的-1
无符号long
数据类型
假设unsigned_foo
是一个unsigned long
,那么我尝试:
printf(“%lu\n”,unsigned\u foo)
printf(“%du\n”,未签名的\u foo)
printf(“%ud\n”,unsigned\u foo)
printf(“%ll\n”,unsigned\u foo)
printf(“%ld\n”,未签名)
printf(“%dl\n”,unsigned\u foo)
它们都打印了某种类型的
-123123123
数字,而不是我的无符号长
。%lu
是无符号长
的正确格式。听起来这里还有其他问题,比如内存损坏或未初始化变量。也许能给我们展示一幅更大的图片?无符号长字符的正确说明符是%lu
如果您没有得到预期的准确值,那么代码中可能存在一些问题
请在这里复制您的代码。然后,也许有人能更好地告诉您问题所在。在您尝试的所有组合中,
%ld
和%lu
是唯一有效的printf格式说明符%lu
(长无符号十进制)、%lx
或%lx
(带小写或大写字母的长十六进制)和%lo
(长八进制)是类型为unsigned long的变量的唯一有效格式说明符(当然,您可以在%
和l
之间添加字段宽度、精度等修饰符).格式为%lu
请检查各种其他数据类型及其在printf中的用法
这将有助于
用于无符号长%lu
用于无符号长%llu
- 对于int
%d
对于长整型%ld
对于长整型%lld
对于无符号long long int
%llu
Oops,%lu
这次起作用。谢谢以前肯定发生过其他事情,但它不起作用。@bodacydo:如果你有一个bug,它可能会半随机出现。。。在尝试打印变量之前,请确保该变量具有有效值。即使该变量未初始化,当格式说明符为%lu
时,printf也不可能达到可以打印减号的程度。从技术上讲,这是未定义的行为,但实际上变量有一个不可预测的值,该值被传递给printf,然后printf将其解释为无符号。我猜bodacydo最初的问题是流到达一个错误的printf调用,而不是预期的…@Anisha Kaul:%lu是一个有效的转换规范,%ul不是<代码>%lu,分解为:%
-启动“转换规范”l
-长度修饰符,l
表示“[无符号]长整数”u
-转换说明符u
用于将无符号int
打印为十进制。因为我们给了长度修饰符l
,所以它会接受一个无符号长int
。字母的顺序必须是:百分比、长度、换算。(您还可以添加一些选项,例如宽度和精度。请参阅手册页,因为它精确地记录了所有这些!)%ul将只打印未签名(带有%u),然后逐字打印字母“l”。正如“%uw”将打印未签名,后跟字母“w”。%启动convspec,u(或其他字符,如d、s、c…)结束它。各种非标准行为都记录在那里,但没有将其标记为非标准。POSIX是printf最容易访问的在线标准;ISO C以外的扩展用“CX”标记:%ld将正常工作,直到std::numeric_limits::max()的值。高于该值%ld将打印错误的值(负值)。@Kaushikarya:不,高于该值是UB。在这之前,它甚至可以说是UB,因为printf
被指定为需要完全正确的参数类型,而不需要va_arg
应有的容差。Yoda约定:“unsigned long”“(l)ong(u)nsigned”是。
int main()
{
unsigned long long d;
scanf("%llu",&d);
printf("%llu",d);
getch();
}