2012-10-17 25 views
14

पढ़ना this SO question, मैंने सोचना शुरू किया - scanf/printf (और परिवार) का उपयोग निश्चित आकार प्रकारों के साथ करने का सही तरीका क्या है?निश्चित आकार के प्रकार के साथ scanf/printf (और परिवार) का उपयोग करने का सही तरीका?

उदाहरण के लिए, अगर मैं short int या int है, मैं %hd और %d क्रमशः का उपयोग करें - ठीक।

लेकिन अगर मेरे पास int16_t है तो क्या होगा? short intint16_t से भिन्न हो सकता है, यह प्लेटफ़ॉर्म निर्भर है। किसी भी अन्य निश्चित आकार (अभिन्न) प्रकार के लिए वही?


नोट: जैसे मैं, कुछ नीचे मत मिले क्योंकि मैं "इस गूगल का प्रयास नहीं किया" ऐसा लगता है के रूप में, यह है कि मैं समझाने की जरूरत है दिखता है: मैंने नहीं किया यहां समान प्रश्न देखें, इसलिए मैंने इसे पोस्ट किया। SO में अधिकांश प्रश्नों का उत्तर देने के बजाय Google का उपयोग करके उत्तर दिया जा सकता था। इससे स्टैक ओवरव्लो जगह नहीं बन जाएगा, यह वास्तव में अब है।

और नहीं, मैंने इसे प्रतिष्ठा के लिए नहीं किया - मैंने पहले ही दैनिक प्रतिष्ठा टोपी मारा है (इस प्रश्न को पोस्ट करने से पहले 24 वोट प्राप्त कर रहे हैं)।

मेरा मुद्दा यह है - मुझे नहीं लगता कि यह कम वोटों के योग्य है।

+1

अपने अच्छे दोस्त google का उपयोग करना न भूलें। ;) खोज करते समय इसे हिट में दिया: ["printf int16_t"] (https://www.google.com/#hl=hi&output=search&sclient=psy-ab&q=printf+int16_t&oq=printf+int16_t&gs_l=hp.3। ..741.1861.0.2073.8.7.0.0.0.0.267.267.2-1.1.0.les% 3B..0.0 ... 1c.1.7MPX56CVufA और पीबीएक्स = 1 & BAV = on.2, or.r_gc.r_pw.r_cp.r_qf। और fp = ec63c9d2be74365f और बीपीसीएल = 35,277,026 और BIW = 1343 & bih = 748)। – Mike

+0

@ माइक - मेरे पास नहीं है :) मुझे लगता है कि यहां समान प्रश्न होना अच्छा होगा (और नहीं, प्रतिष्ठा के कारण नहीं - मैंने आज ही दैनिक प्रतिष्ठा टोपी (अब तक 24 अपवॉट्स) हैं)। मुझे नहीं लगता कि यह वोटों के हकदार है। –

+0

+1 आपके संपादन से सहमत है। स्पष्टीकरण देने के लिए धन्यवाद। – Mike

उत्तर

13

सही तरीका inttypes.h जो printf परिवार और scanf परिवार, उदा के लिए मानक मैक्रो को परिभाषित करता है उपयोग करने के लिए है

printf ("%" PRId16, short_int); 
scanf ("%" SCNd16, &short_int); 
+0

कूल, धन्यवाद :) +1 और स्वीकार किया गया। –

+0

यह '% d' से बेहतर क्यों है? क्या छोटा 'int' में परिवर्तित नहीं किया जाएगा? –

4

inttypes.h हेडर फ़ाइल में मैक्रोज़ हैं जो stdint.h में परिभाषित निश्चित-चौड़ाई पूर्णांक के लिए सही प्रारूप विनिर्देशों को परिभाषित करते हैं। उदाहरण के लिए, printf() और int16_t के लिए प्रकार विनिर्देशक PRId16 नामक मैक्रो है। उदाहरण:

int16_t x; 
scanf("%" SCNd16, &x); 

printf("You have entered: %" PRId16 "\n", x); 
+1

मैक्रोज़ में आवश्यक प्रमुख '%' वर्ण शामिल नहीं है। –

+0

@ स्टीव-ओ फिक्स्ड। –