我想知道为什么这个节目的结果是5621?
#include <stdio.h>
main()
{
int i=56;
printf("%d\n",printf("%d",printf("%d",i)));
getch();
}
答案 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
,然后输出2
,56
中的字符数。
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