我想知道为什么这个程序的结果是 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
,然后2
,56
中的字符数。
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