我想知道为什么这个程序的结果是5621?printf给出意想不到的结果
#include <stdio.h>
main()
{
int i=56;
printf("%d\n",printf("%d",printf("%d",i)));
getch();
}
我想知道为什么这个程序的结果是5621?printf给出意想不到的结果
#include <stdio.h>
main()
{
int i=56;
printf("%d\n",printf("%d",printf("%d",i)));
getch();
}
printf
返回已打印字符的数量。
因此,首先最内部的printf
被调用56,打印56
。然后它将已打印的字符数量(2)返回到中间printf
,打印2
。最后,打印的字符数量(1)被传递到外部printf
,然后打印出来以生成5621
。
printf()
函数返回它在控制台上打印的字符数。
例如,在下面的printf调用之后,num_chars
将具有值10
作为字符串"Hi haccks\n"
包含将在屏幕上打印的10个非nul字符。
num_chars = printf("Hi haccks\n");
// ^^^^^^^^^^
// 12345678910
注:\n
是单个10 第炭。所以在上面的代码中返回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
@delnan为了清晰起见,它已被编辑并重新编辑。 – gtrig
从在printf
man page
返回值
成功返回后,这些函数返回打印的 字符数(不包括用于结束输出的空字节为 字符串)。
56
被印刷用于内printf
2个字符被印所以参数至下一%d
格式说明是2
1个字符是由中间printf
印刷这样的参数外%d
格式说明是1
只有外层printf
包含一个换行符,所以前面的调用在同一行上依次输出,给出5621\n
。
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
。
这相当于
#include <stdio.h>
main()
{
int n, i = 56;
n = printf("%d",i);
n = printf("%d", n);
n = printf("%d\n", n);
}
的printf返回写入的字符数。
它甚至编译? 'main'没有返回类型 – StoryTeller
阅读关于['printf'](http://en.cppreference.com/w/c/io/fprintf)以及返回结果,并了解堆栈,并且您将理解。 –
printf:成功时返回写入的字符总数。 – P0W