This question already has answers here:
What is the difference between conversion specifiers %i and %d in formatted IO functions (*printf / *scanf)
                                
                                    (4个答案)
                                
                        
                                2年前关闭。
            
                    
我和我的朋友在争论%lli%lld。我通常使用%lli,并且每次他争辩要在%lldprintf中使用scanf。他声称%lli%lld是不同的。

GNU GCC编译器中的%lli%lld格式说明符之间是否有区别,或者它们相同吗?

最佳答案

对于printf,它们完全相同。

http://en.cppreference.com/w/cpp/io/c/fprintf


  di将有符号整数转换为十进制表示形式[-] dddd。
  
  精度指定出现的最小位数。默认精度为1。
  如果转换后的值和精度均为``0'',则转换不会产生任何字符。




对于scanf,它们是不同的。以下是来自文档的引用。


  d匹配一个十进制整数。
  该数字的格式与strtol()期望的相同,基本参数的值为10
  
  i匹配一个整数。
  该数字的格式与strtol()期望的相同,其中base参数的值为``0''(base由解析的第一个字符确定)


对于i,如果您的电话号码以0开头,它将被解析为八进制。

http://en.cppreference.com/w/cpp/io/c/fscanf

10-08 09:29