我和我的朋友在争论%lli
和%lld
。我通常会使用%lli
,每次他都在%lld
和printf
中使用scanf
。他声称%lli
和%lld
不同。
GNU GCC编译器中的%lli
和%lld
格式说明符之间是否有任何区别,或它们是否相同?
答案 0 :(得分:3)
对于printf,它们完全相同。
http://en.cppreference.com/w/cpp/io/c/fprintf
d
,i
将带符号的整数转换为十进制表示[ - ] dddd。Precision指定要显示的最小位数。默认精度为1。 如果转换后的值和精度均为0,则转换不会产生任何字符。
对于scanf,它们是不同的。以下是文档引用。
d
匹配十进制整数。 数字的格式与strtol()的预期相同,基本参数的值为10
i
匹配整数。 数字的格式与strtol()的预期相同,基本参数的值为0(base由解析的第一个字符确定)
如果是i
,如果您的号码以0
开头,则会将其解析为八进制。
答案 1 :(得分:0)
可能你应该看到文件......?
对于printf()
,它们是等效的,但它们因scanf()
而不同。
http://www.cplusplus.com/reference/cstdio/scanf/
对于说明符d
,从输入流中提取的字符是任意数量的十进制数字(0-9),可选地前面带有符号(+或 - )。
对于i
,它是任意数量的数字,可选地前面带有符号(+或 - )。
默认采用十进制数字(0-9),但 0前缀引入八进制数字(0-7)和0x十六进制数字(0-f)。
签名论证。