printf给出意想不到的结果

时间:2013-07-23 16:46:37

标签: c

我想知道为什么这个节目的结果是5621?

#include <stdio.h>

main()
{
    int i=56;
    printf("%d\n",printf("%d",printf("%d",i)));
    getch();
}

5 个答案:

答案 0 :(得分:22)

printf返回已打印的字符数。

首先,使用56调用最内部的printf,打印56。然后它将打印的字符数(2)返回到中间printf,打印2。然后最后打印的字符数量(1)被传递到外部printf,然后打印到procude 5621

答案 1 :(得分:9)

来自printf man page

  

返回值

     

成功返回后,这些函数返回的数量   打印的字符(不包括用于结束输出的空字节)   字符串)。

为内56打印

printf
打印了2个字符,因此下一个%d格式说明符的参数为2
中间printf打印了1个字符,因此外%d格式说明符的参数为1
只有外部printf包含换行符,因此前面的调用会在同一行上逐个输出,并显示5621\n

答案 2 :(得分:6)

printf()返回打印的字符数:

printf("%d",i)输出值56 printf("%d",printf("%d",i))输出56,然后输出256中的字符数。
printf("%d\n",printf("%d",printf("%d",i)))输出56,然后输出2,然后输出2中的字符数1

答案 3 :(得分:6)

相当于

#include <stdio.h>

main()
{
    int n, i = 56;
    n = printf("%d",i);
    n = printf("%d", n);
    n = printf("%d\n", n);
}

printf返回写入的字符数。

答案 4 :(得分:1)

printf()函数返回它在控制台上打印的字符数。

例如,在以下printf调用之后,num_chars将使用值10作为字符串"Hi haccks\n",将在屏幕上打印10个非空字符。

num_chars = printf("Hi haccks\n");
//                  ^^^^^^^^^ ^ 
//                  12345678910    

注意\n是单个10 th 字符。所以在上面的代码中,printf返回了分配给num_chars变量的值。

在你的代码中,在给定的语句中,内部printf()打印值,然后返回由外部printf打印的值的字符数,如下所示:

// 1              2            3
printf("%d\n", printf("%d", printf("%d",i))); // Here i = 56
         ^              ^            ^    
   print: 1       print: 2         print: 56 
   returns: 1     returns: 1       returns: 2
//    3             2               1        <--Order of printf called 

所以输出5621