簡體   English   中英

printf給出意想不到的結果

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM