इंटीजर
वैल्यू का scanf के द्वारा इनपुट :
यदि
आप इंटीजर वैल्यू का इनपुट लेना चाहते है और आप scanf फंक्शन उपयोग कर रहे हैं तो इस फंक्शन का इस्तेमाल विशेष
फार्मेट के उपयोग से करना होता हैं। इंटीजर के निम्न फार्मेट का इस्तेमाल किया जा
सकता हैं।
%w d
यहाँ
पर % यह इंगित कर रहा हैं की जो भी वैल्यू की-वोर्ड से प्रेषित होगी उसका प्रकार
बदलकर हमारी (यानि प्रोग्राम) की आवश्यकता अनुसार करना होगा। इसके बाद आप देख रहे
हैं की w लिखा हुआ हैं, w यह इंगित करता हैं की जब भी आप की-बोर्ड से इनपुट
लेंगे, तो इनपुट किए गए वैल्यू की width कितनी होगी। जब भी format लिखेंगे तो w की जगह डिजिट लिखा जाएगा, जितनी अक्षर या डिजिट का
इनपुट चाहिए उतनी संख्या आपको w के स्थान मे लिखने चाहिए। d का अर्थ यह हुआ की इनपुट की हुई संख्या इंटीजर के रूप मे स्वीकार्य होगी।
उदाहरण
:1
scanf ( “%4d”, &num1 ) ;
यहाँ
पर हम scanf फंक्शन का इस्तेमाल
कर रहे हैं। इस फंक्शन मे हम दो आर्गुमेंट का इस्तेमाल कर रहे हैं, पहला आर्गुमेंट “%4d” (इस आर्गुमेंट से पता चलता
हैं की scanf किस प्रकार का इनपुट लेने वाला हैं) हैं जबकि दूसरा आर्गुमेंट &num1 हैं। %4d मे जिसमे % का कार्य ऊपर बताया गया हैं, 4 यहाँ पर w के स्थान मे हैं जिसका कम यह निर्देशित करना हैं की इनपुट मे कितने डिजिट
या अक्षर प्रेषित होंगे। और d यह बता रहा हैं की इनपुट किया
हुआ वैल्यू इंटीजर ही होना चाहिए, अन्यथा वह स्वीकार्य नहीं
होगा।
दूसरा आर्गुमेंट &num1 हैं, यहाँ पर num1 एक वेरिएबल हैं,
जिसके लिए scanf फंक्शन से इनपुट लिया जा रहा हैं। num1 वेरिएबल के आंगे & “एड्रेस आपरेटर” लगा हुआ हैं
जो यह बता रहा हैं की scanf फंक्शन के माध्यम से जो भी इनपुट
लिया जाएगा, वह num1 वेरिएबल के मेमोरी
एड्रेस मे स्टोर होगा।
जैसे scanf (“%2d%3d” &a, &b)
अब अगर
आप 23452 फिर 234 इनपुट
करे तो बताए a और b मे क्या वैल्यू स्टोर
होगी।
a = 23 और b = 452, एसा इसलिए क्योंकि
%2d का अर्थ हुआ की 2 डिजिट का इंटीजर वैल्यू जबकि हमने इनपुट
किया था 23452 इसके शुरू के दो डिजिट a मे स्टोर हो गए जबकि बाकी
बचे तीन डिजिट b मे स्टोर हो गए। और दूसरी बार इनपुट किया गया
वैल्यू 234 स्किप्ड हो जाएगा।
अगला उदाहरण scanf
(“%d%2d ”, &a, &b);
अब इनपुट
करते हैं, 1234 और 564 अब बताए a
और b मे क्या स्टोर होगा?? a मे 1234 स्टोर होगा जबकि b मे
56 ही स्टोर होगा। ऐसा इसलिए क्योंकि जब भी %d लिखते हैं और width की जानकारी नहीं देते हैं तो इंटीजर अपने लिमिट तक के संख्या को स्टोर कर
सकता हैं। जबकि b के लिए format स्ट्रिंग
%2d उपयोग हुआ हैं जिसका अर्थ हैं की b
वेरिएबल के लिए केवल दो डिजिट की संख्या स्वीकार्य करनी हैं। जिसके परिणाम स्वरूप 564
इनपुट तो किया गया पर यह 3 डिजिट की संख्या थी इसलिए इसके शुरू के दो डिजिट b मे स्टोर किए गए और बाकी बचा डिजिट को हटा दिया गया।
उदाहरण
3 scanf (“%*d%2d”, &a, &b);
इस उदाहरण
मे उपयोग किए गए scanf फंक्शन के माध्यम से a और b मे
क्या वैल्यू स्टोर होगी, अगर हम दो इनपुट 342 और 3412 देते हैं? यहाँ पर a मे 34 और b मे गरबेज
वैल्यू स्टोर होगी।
इसका
कारण : %*d अगर
यह format स्ट्रिंग scanf मे लिखा हुआ हैं
तो इसका तात्पर्य यह हैं की इसके समांतर जिस वैल्यू को इनपुट कर रहे हैं उस वैल्यू
को scanf स्किप (skip) कर देता हैं, इस लिए जब ऊपर दिये उदाहरण मे %*d के समांतर 342 को
इनपुट किया गया तो पूरी की पूरी वैल्यू स्किप हो गई, यानि उसे
रीड (read) नहीं किया गया।
इसके बाद %*d के तुरंत बाद अगला format स्ट्रिंग लिखा हुआ हैं, %2d जिसकी
वजह से scanf दूसरी बार यूजर से इनपुट लेगा। जिसके समानान्तर
हमने 3412 को इनपुट किया क्योंकि इसमे कोई भी * (स्टार) नहीं था इस लिए ये स्किप नहीं
होगा, यानि यह इनपुट पढ़ा गया पर केवल 2 डिजिट ही पढे गए जो हैं
34 क्योंकि इनपुट a वेरिएबल के लिए लेना था पर पहला वैल्यू स्किप
हो गया, तो दूसरा वैल्यू को वेरिएबल a मे
स्टोर करेंगे। इस लिए a मे 34 स्टोर होगा, जबकि तीसरा format स्ट्रिंग ऊपर दिये उदाहरण मे नहीं
लिया गया हैं इस लिए अब कोई भी इनपुट नहीं लिया जाएगा , और b बिना वैल्यू के रहेगा, जिससे उसके पास पुरानी वैल्यू
ही रहेगी। जिसे गरवेज वैल्यू बोलते हैं।
No comments:
Write comments