%i或%d使用printf()在c中打印整数?

Dum*_*ode 45 c int console printf integer

我只是在学习C而且由于涉及到iOS开发,我对Objective-C有一点了解,但是,在Objective-C中,我用它NSLog(@"%i", x);来将变量x打印到控制台,但是我一直在阅读一些C教程,他们正在说要用%d而不是%i.

printf("%d", x); 并且正确地将xprintf("%i", x);打印到控制台.

这些似乎都让我到了同一个地方所以我问经验丰富的开发人员哪个更受欢迎?还有一种语义正确还是正确

小智 52

与它们一起使用时它们完全等效printf().就个人而言,我更喜欢%d,它更经常使用(我应该说"它是"惯用转换说明符int"?).

(之间的一个区别%i,并%d是与使用时scanf(),则%d总是需要一个十进制整数,而%i识别00x前缀为八进制和十六进制,但没有健全的程序员使用scanf()反正所以这不应该是一个问题.)

  • 这可能是非常晚,但使用scanf()有什么问题? (9认同)
  • @ Spellbinder2050,见[http://c-faq.com/stdio/scanfprobs.html](http://c-faq.com/stdio/scanfprobs.html).基本上,scanf()对意外输入的反应不好. (4认同)
  • 你似乎知道自己在做什么。不妨听取最好的建议。;) (2认同)
  • 您是否检查了乍得提供的链接?`“使用scanf时,要优雅地处理所有这些潜在问题几乎是不可能的;用fgets等读取整行要容易得多,...(strtol,strtok和atoi等功能通常很有用”)男人,我讨厌这样的评论,人们会说“哦,其他所有人都很卑鄙”,但不要像OiciTrap那样通读提供的资源。 (2认同)

A.s*_*lar 20

我只是在这里添加示例,因为我认为示例使其更容易理解.

在printf()中,它们的行为相同,因此您可以使用任何%d或%i.但它们在scanf()中表现不同.

例如:

int main()
{
    int num,num2;
    scanf("%d%i",&num,&num2);// reading num using %d and num2 using %i

    printf("%d\t%d",num,num2);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

在此输入图像描述

您可以看到相同输入的不同结果.

num:

我们正在阅读num使用,%d所以当我们输入010它时忽略第一个0并将其视为十进制10.

num2:

我们正在阅读num2使用%i.

这意味着它将以不同方式处理小数,八进制和十六进制.

当它给num2 010它看到领先0并将其解析为八进制.

当我们用它打印%d它打印八进制的十进制值0108.

  • 提升你,但我更倾向于看到一个完整的答案,而不是拼凑而不是另一个答案(这正是StackOverflow项目所针对的) (2认同)