printf 给出了意想不到的结果



我想知道为什么这个程序的结果是 5621?

#include <stdio.h>
main()
{
    int i=56;
    printf("%dn",printf("%d",printf("%d",i)));
    getch();
}

printf返回它打印的字符数。

所以首先最内部的printf被调用 56,打印56 .然后它将已打印的字符数(2(返回到中间printf,打印2。最后打印的字符数(1(被传递到外printf,然后被打印成5621

来自printf手册页

返回值

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

56为内printf印刷
打印了 2 个字符,因此下一个 %d 格式说明符的参数2
中间printf打印了 1 个字符,因此外部 %d 格式说明符的参数1
只有外部printf包含换行符,因此前面的调用在同一行上一个接一个地输出,从而给出5621n

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

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

它相当于

#include <stdio.h>
main()
{
    int n, i = 56;
    n = printf("%d",i);
    n = printf("%d", n);
    n = printf("%dn", n);
}

printf 返回写入的字符数。

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

例如,在以下 printf 调用之后,num_chars 的值将10为字符串"Hi haccksn"由 10 个非 NUL 字符组成,这些字符将在屏幕上打印。

num_chars = printf("Hi haccksn");
//                  ^^^^^^^^^ ^ 
//                  12345678910    

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

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

// 1              2            3
printf("%dn", 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

最新更新