2013-07-23 10 views
5

मैं सोच रहा था कि इस कार्यक्रम का नतीजा 5621 क्यों है?printf अप्रत्याशित परिणाम देता है

#include <stdio.h> 

main() 
{ 
    int i=56; 
    printf("%d\n",printf("%d",printf("%d",i))); 
    getch(); 
} 
+0

क्या यह संकलित भी करता है? 'main' में कोई रिटर्न टाइप नहीं है – StoryTeller

+4

[' printf'] (http://en.cppreference.com/w/c/io/fprintf) के बारे में पढ़ें, और यह क्या लौटाता है, और ढेर के बारे में जानें, और आप समझेंगे। –

+2

printf: सफलता पर, लिखे गए अक्षरों की कुल संख्या देता है। – P0W

उत्तर

22

printf प्रिंट किए गए वर्णों की मात्रा लौटाता है।

तो सबसे पहले सबसे आंतरिक printf 56 के साथ बुलाया जाता है, 56 प्रिंटिंग। फिर यह मुद्रित वर्णों की मात्रा (2) को printf पर प्रिंट करता है, 2 प्रिंट करता है। फिर आखिर में मुद्रित वर्णों की मात्रा (1) बाहरी printf में पारित हो जाती है, जिसे 5621 को प्रोसेस करने के लिए मुद्रित किया जाता है।

1

printf() फ़ंक्शन कंसोल पर प्रिंट किए गए वर्णों की संख्या देता है।

उदाहरण के लिए निम्नलिखित printf कॉल के बाद, num_chars के पास 10 होगा 0 स्ट्रिंग "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

+1

@ डेलनान इसे फिर से संपादित किया गया है और स्पष्टता के लिए दोहराया गया है। – gtrig

9

से printfman page

वापसी मान

सफल वापसी पर, ये फ़ंक्शंस मुद्रित वर्णों की संख्या लौटाते हैं ( तारों के आउटपुट को समाप्त करने के लिए उपयोग किए गए शून्य बाइट को छोड़कर)।

56 भीतरी printf
2 पात्रों के लिए छपा है मुद्रित कर रहे थे इसलिए अगले %d फॉर्मेट स्पेसिफायर को तर्क 2
1 चरित्र बीच printf द्वारा मुद्रित किया गया था ताकि बाहरी %d फॉर्मेट स्पेसिफायर लिए तर्क है 1
केवल बाहरी printf में एक नई लाइन शामिल है, इसलिए पिछली कॉल एक ही पंक्ति पर दूसरे के बाद आउटपुट करती है, 5621\n दे रही है।

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 है।

6

यह बराबर है

#include <stdio.h> 

main() 
{ 
    int n, i = 56; 
    n = printf("%d",i); 
    n = printf("%d", n); 
    n = printf("%d\n", n); 
} 

को printf लिखा वर्णों की संख्या देता है।

संबंधित मुद्दे