我想知道爲什麼這個程序的結果是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