printf给出意想不到的结果

C_I*_*ner 5 c

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

#include <stdio.h>

main()
{
    int i=56;
    printf("%d\n",printf("%d",printf("%d",i)));
    getch();
}
Run Code Online (Sandbox Code Playgroud)

orl*_*rlp 22

printf 返回已打印的字符数.

所以首先,最内层的printf是56,打印56.然后它将打印的字符数(2)返回到中间printf,打印2.然后最后打印的字符数量(1)被传递到外部printf,然后打印到procude 5621.


sim*_*onc 9

printf 手册页

返回值

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

56打印内部printf
2个字符被打印,因此下一个%d格式说明符的参数是2
1个字符由中间打印printf所以外部%d格式说明符的参数是1
只有外部printf包含换行符所以前面的调用一个接一个地输出同一条线,给予5621\n.


JAB*_*JAB 6

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

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


Aru*_*lor 6

它相当于

#include <stdio.h>

main()
{
    int n, i = 56;
    n = printf("%d",i);
    n = printf("%d", n);
    n = printf("%d\n", n);
}
Run Code Online (Sandbox Code Playgroud)

printf返回写入的字符数.