嵌套的printf语句工作

San*_*pho 0 c printf

我无法理解以下代码如何给出不同的输出

#include <stdio.h>
int main()
{
        int i=43;
        printf("%d\n",printf("%d",printf("%d",i)));
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出: 4321

printf("%d\n",printf("%d",printf("%d ",i)));
Run Code Online (Sandbox Code Playgroud)

输出: 43 31

printf("%d\n",printf("%d ",printf("%d ",i)));
Run Code Online (Sandbox Code Playgroud)

输出: 43 3 2

printf("%d\n",printf("%d ",printf(" %d ",i)));
Run Code Online (Sandbox Code Playgroud)

产量 43 4 2

printf("%d\n",printf(" %d ",printf(" %d ",i)));
Run Code Online (Sandbox Code Playgroud)

输出: 43 4 3

和其他变化也给出了其他产出.

如何只是一个空格改变一个数字.

提前致谢.

art*_*rtm 7

printf 返回打印的字符数

在您的情况下,该语句可以像这样打破 - 输出是预期的:

    printf("%d\n", // 1
           printf("%d", // 2
                  printf("%d",i)    // 43
                 )
          );  // 4321
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅标准fprintf(与流的printf特殊情况)fprintfstdout

7.21.6.1 fprintf函数

 #include <stdio.h>
       int fprintf(FILE * restrict stream,
           const char * restrict format, ...);
Run Code Online (Sandbox Code Playgroud)

fprintf函数返回传输的字符数,如果发生输出或编码错误,则返回负值.