[英]printf gives unexpected result
我想知道為什么這個節目的結果是5621?
#include <stdio.h>
main()
{
int i=56;
printf("%d\n",printf("%d",printf("%d",i)));
getch();
}
printf
返回它打印的字符數。
所以首先用56調用最內層的printf
,打印56
。 然后它將打印的字符數(2)返回到中間printf
,打印2
。 然后最后打印的字符數量(1)被傳遞到外部printf
,然后打印到procure 5621
。
來自printf
手冊頁
返回值
成功返回后,這些函數返回打印的字符數(不包括用於結束輸出到字符串的空字節)。
56
被印刷用於內printf
打印了2個字符,因此下一個%d
格式說明符的參數為2
中間printf
打印了1個字符,因此外部%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返回寫入的字符數。
printf()
函數返回它在控制台上打印的字符數。
例如,在以下printf調用之后, num_chars
將值為10
作為字符串"Hi haccks\\n"
將在屏幕上打印10個非空字符。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.