2012-11-16 13 views
65

मुझे पता है कि यह उत्पादक नहीं लगता है, लेकिन मैं printf कॉल के लिए सभी स्वरूपण कोड याद रखने का एक तरीका ढूंढ रहा हूं। %s, %p, %f सभी स्पष्ट हैं, लेकिन मुझे समझ में नहीं आता कि %d कहां से आता है। %i पहले से ही किसी और द्वारा लिया गया है?इंटीजर के लिए% d क्यों खड़ा है?

+18

मेरा सबसे अच्छा अनुमान दशमलव –

+0

है, हालांकि, यह एक प्रकार का विडंबनापूर्ण +1 है, दिलचस्प सवाल है। – Daniel

+0

हालांकि यह वास्तविक प्रोग्रामिंग प्रश्न नहीं है, और मैं उनको बंद कर देता हूं :) –

उत्तर

83

यह "decimal" (आधार 10), "पूर्णांक" नहीं है। (बेस 8) में प्रिंट करने के लिए आप (बेस 16), और %o में प्रिंट करने के लिए %x का उपयोग कर सकते हैं। इन अड्डों में से किसी एक में एक पूर्णांक हो सकता है।

printf() में, आप %d के पर्याय के रूप %i उपयोग कर सकते हैं, यदि आप के बजाय "पूर्णांक" इंगित करने के लिए पसंद करते हैं "दशमलव," लेकिन %d आम तौर पर पसंद किया जाता है के रूप में यह और अधिक विशिष्ट है।

इनपुट पर, scanf() का उपयोग करके, आप %i और %d दोनों का उपयोग भी कर सकते हैं। %i का मतलब किसी भी आधार (ऑक्टल, हेक्साडेसिमल, या दशमलव में एक पूर्णांक के रूप में पार्स करें, जैसा कि 0 या 0x उपसर्ग द्वारा इंगित किया गया है), जबकि %d का अर्थ यह दशमलव पूर्णांक के रूप में पार्स करना है।

यहाँ कार्रवाई में उन सभी का एक उदाहरण है:

#include <stdio.h> 

int main() { 
    int out = 10; 
    int in[4]; 

    printf("%d %i %x %o\n", out, out, out, out); 
    sscanf("010 010 010 010", "%d %i %x %o", &in[0], &in[1], &in[2], &in[3]); 
    printf("%d %d %d %d\n", in[0], in[1], in[2], in[3]); 
    sscanf("0x10 10 010", "%i %i %i", &in[0], &in[1], &in[2]); 
    printf("%d %d %d\n", in[0], in[1], in[2]); 

    return 0; 
} 

तो, आप केवल %i का उपयोग करना चाहिए अगर आप उपसर्ग पर निर्भर करने के लिए इनपुट आधार चाहते हैं; यदि इनपुट बेस को ठीक किया जाना चाहिए, तो आपको %d, %x, या %o का उपयोग करना चाहिए। विशेष रूप से, तथ्य यह है कि एक अग्रणी 0 आपको ऑक्टल मोड में रखता है, आपको पकड़ सकता है।

+0

यह बताने के लिए धन्यवाद कि क्यों मैं% करता हूं। – clementine

7

http://en.wikipedia.org/wiki/Printf_format_string कि यह दशमलव के लिए है के रूप में मैं एक हस्ताक्षरित दशमलव संख्या के रूप में

d,i

पूर्णांक अनुमान लगाया था कहने के लिए लगता है। '% d' और '% i' आउटपुट के समानार्थी हैं, लेकिन इनपुट के लिए scanf() के साथ उपयोग किए जाने पर भिन्न होते हैं (% i का उपयोग करके हेक्सडेसिमल के रूप में एक संख्या की व्याख्या करेगा यदि यह 0x से पहले है, और ऑक्टल से पहले 0.)

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