स्वरूपित IO फ़ंक्शन (* प्रिंटफ़ / * स्कैनफ़) में रूपांतरण विनिर्देशक% i और% d के बीच क्या अंतर है


जवाबों:


276

वे समान हैं जब आउटपुट के लिए उपयोग किया जाता है, उदाहरण के लिए printf

हालाँकि, इनपुट के रूप में उपयोग किए जाने पर ये अलग-अलग होते हैं, उदाहरण के लिए scanf, जहां %dएक पूर्णांक को एक हस्ताक्षरित दशमलव संख्या के रूप में स्कैन किया जाता है, लेकिन %iदशमलव में चूक होती है , लेकिन हेक्साडेसिमल (यदि पूर्ववर्ती 0x) और अष्टक (यदि पूर्ववर्ती हो 0) की अनुमति देता है।

तो 03327 के साथ होगा %iलेकिन 33 के साथ %d


8
Sscanf में जीरो-पेडिंग के साथ इंट की अपेक्षा करना मुझे सबसे उचित डिफ़ॉल्ट व्यवहार लगता है। यदि आप ऑक्टल की उम्मीद नहीं कर रहे हैं, तो इससे सूक्ष्म कीड़े हो सकते हैं। तो इससे पता चलता है कि% d का उपयोग करने के लिए एक अच्छा विनिर्देशक है जब आपको किसी एक को मनमाने ढंग से चुनना होगा, जब तक कि आप स्पष्ट रूप से अष्टक और / या हेक्स नहीं पढ़ना चाहते।
एलियट

2
आह! यह समझ आता है! अब मैं, के लिए यह भी के लिए दस्तावेज में देखा जा सकता है देखने के लिए क्या पता है कि printfऔर scanf
गेब्रियल स्टेपल्स

67

ये समान हैं, printfलेकिन अलग हैं scanfprintfदोनों के लिए , एक हस्ताक्षरित दशमलव पूर्णांक को नामित %dऔर %iनामित करना। के लिए scanf, %dऔर %iयह भी एक हस्ताक्षर किए पूर्णांक का मतलब है , लेकिन %iइनपुट को हेक्साडेसिमल नंबर के रूप में सूचित करता है यदि पूर्ववर्ती 0xऔर अष्टक यदि पूर्ववर्ती है 0और अन्यथा इनपुट को दशमलव के रूप में व्याख्या करता है।


20

वहाँ कोई अंतर नहीं है %iऔर %dप्रारूप विनिर्देशक के लिए printf। हम इसे C99 मानक सेक्शन के मसौदे पर जाकर देख सकते हैं 7.19.6.1 । फ़र्फ़रफ़ फ़ंक्शन जो printfप्रारूप विनिर्देशकों के संबंध में भी है और यह पैरा 8 में कहता है :

रूपांतरण विनिर्देशक और उनके अर्थ हैं:

और निम्नलिखित बुलेट शामिल हैं:

d,i     The int argument is converted to signed decimal in the style
        [−]dddd. The precision specifies the minimum number of digits to
        appear; if the value being converted can be represented in fewer
        digits, it is expanded with leading zeros. The default precision is
        1. The result of converting a zero value with a precision of zero is
        no characters.

दूसरी ओर scanfएक अंतर है, %dआधार 10 मान लीजिए जबकि %iऑटो आधार का पता लगाता है। हम इसे अनुभाग पर जाकर देख सकते हैं 7.19.6.2 fscanf फ़ंक्शन जो scanfप्रारूप विनिर्देशक के संबंध में कवर करता है, पैरा 12 में यह कहता है:

रूपांतरण विनिर्देशक और उनके अर्थ हैं:

और निम्नलिखित शामिल हैं:

d     Matches an optionally signed decimal integer, whose format is the
      same as expected for the subject sequence of the strtol function with
      the value 10 for the base argument. The corresponding argument shall
      be a pointer to signed integer.

i     Matches an optionally signed integer, whose format is the same as
      expected for the subject sequence of the strtol function with the
      value 0 for the base argument. The corresponding argument shall be a
      pointer to signed integer.

4

ऐसा कोई नहीं है printf- दोनों पर्यायवाची हैं।


6
जब scanf()प्रारूप में स्ट्रिंग का उपयोग किया जाता है तो एक अंतर होता है क्योंकि स्वीकृत उत्तर कहता है।
जे ... एस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.