स्कैनफ सी फ़ंक्शन विवरण
स्कैनफ सी फ़ंक्शन विवरण

वीडियो: स्कैनफ सी फ़ंक्शन विवरण

वीडियो: स्कैनफ सी फ़ंक्शन विवरण
वीडियो: Weekly Current affairs- #68 (साप्ताहिक करंट अफेयर) | 18 May 2020 | Important For All Exam | SN 2024, मई
Anonim

इस आलेख में, किसी विशिष्ट मानक के संदर्भ के बिना स्कैनफ () फ़ंक्शन को सामान्य रूप में माना जाता है, इसलिए किसी भी सी 99, सी 11, सी ++ 11, सी ++ 14 मानकों से डेटा यहां शामिल किया गया है। शायद, कुछ मानकों में, फ़ंक्शन लेख में प्रस्तुत सामग्री से अंतर के साथ काम करता है।

स्कैनफ सी फंक्शन - विवरण

scanf() stdio.h(C) और cstdio(C++) हेडर फाइलों में स्थित एक फ़ंक्शन है, जिसे स्वरूपित प्रोग्राम इनपुट के रूप में भी जाना जाता है। स्कैनफ मानक इनपुट स्ट्रीम (स्टडीन) से वर्णों को पढ़ता है और उन्हें प्रारूप के अनुसार परिवर्तित करता है, फिर उन्हें निर्दिष्ट चर में लिखता है। प्रारूप - का अर्थ है कि प्राप्त होने पर डेटा एक निश्चित रूप में परिवर्तित हो जाता है। इस प्रकार, स्कैनफ सी फ़ंक्शन का वर्णन किया गया है:

स्कैनफ("%format", &variable1[, &variable2, […]), जहां वेरिएबल को पतों के रूप में पास किया जाता है। किसी फ़ंक्शन में चर पारित करने के इस तरीके का कारण स्पष्ट है: काम के परिणामस्वरूप, यह त्रुटियों की उपस्थिति का संकेत देने वाला मान देता है, इसलिएचर के मूल्यों को बदलने का एकमात्र तरीका पते से गुजरना है। साथ ही, इस पद्धति के लिए धन्यवाद, फ़ंक्शन किसी भी प्रकार के डेटा को संसाधित कर सकता है।

कुछ प्रोग्रामर अन्य भाषाओं के सादृश्य के कारण स्कैनफ () या प्रिंटफ () जैसे कार्यों को प्रक्रियाओं के रूप में संदर्भित करते हैं।

स्कैनफ सभी बुनियादी भाषा प्रकारों के इनपुट की अनुमति देता है: चार, इंट, फ्लोट, स्ट्रिंग, आदि। टाइप स्ट्रिंग के चर के मामले में, पता चिह्न - "&" निर्दिष्ट करने की कोई आवश्यकता नहीं है, क्योंकि टाइप स्ट्रिंग का चर एक सरणी है, और इसका नाम कंप्यूटर की मेमोरी में सरणी के पहले तत्व का पता है.

सी ++ में सी का उपयोग करना
सी ++ में सी का उपयोग करना

डेटा प्रविष्टि प्रारूप या नियंत्रण स्ट्रिंग

विवरण से स्कैनफ सी फ़ंक्शन उदाहरण को देखकर प्रारंभ करें।


int main() { int x; जबकि (स्कैनफ ("% d", और x)==1) प्रिंटफ ("% d / n", x); वापसी 0; // linux सिस्टम के लिए आवश्यकता }

इनपुट प्रारूप में निम्नलिखित चार पैरामीटर शामिल हैं: %[चौड़ाई] [संशोधक] प्रकार। इस मामले में, "%" चिह्न और प्रकार अनिवार्य पैरामीटर हैं। यानी, न्यूनतम प्रारूप इस तरह दिखता है: "%s", "%d" और इसी तरह।

सामान्य तौर पर, प्रारूप स्ट्रिंग बनाने वाले वर्णों को विभाजित किया जाता है:

  • प्रारूप विनिर्देशक - % से शुरू होने वाली कोई भी चीज़;
  • अलग करना या स्पेस कैरेक्टर - वे स्पेस, टैब(t), न्यूलाइन (n); हैं
  • व्हाट्सएप के अलावा अन्य वर्ण।

कार्य सुरक्षित नहीं हो सकता है।

स्कैनफ () के बजाय स्कैनफ_एस () का प्रयोग करें।

(विजुअल स्टूडियो से संदेश)

प्रकार, या प्रारूप विनिर्देशक, या रूपांतरण वर्ण, या नियंत्रण वर्ण

बाइनरी कोड
बाइनरी कोड

एक स्कैनफ सी घोषणा में कम से कम एक प्रारूप विनिर्देशक होना चाहिए, जो "%" से शुरू होने वाले भावों के अंत में निर्दिष्ट है। यह प्रोग्राम को बताता है कि प्रवेश करते समय किस प्रकार का डेटा अपेक्षित है, आमतौर पर कीबोर्ड से। नीचे दी गई तालिका में सभी प्रारूप विनिर्देशों की सूची।

प्रकार अर्थ
1 %c

कार्यक्रम एक चरित्र इनपुट की प्रतीक्षा कर रहा है। लिखा जाने वाला वेरिएबल वर्ण प्रकार का होना चाहिए।

2 %d कार्यक्रम पूर्णांक प्रकार की दशमलव संख्या के इनपुट की अपेक्षा करता है। वेरिएबल int प्रकार का होना चाहिए।
3 %मैं कार्यक्रम पूर्णांक प्रकार की दशमलव संख्या के इनपुट की अपेक्षा करता है। वेरिएबल int प्रकार का होना चाहिए।
4 %ई, %ई कार्यक्रम घातीय रूप में एक फ्लोटिंग पॉइंट (अल्पविराम) संख्या दर्ज करने की अपेक्षा करता है। वेरिएबल फ्लोट प्रकार का होना चाहिए।
5 %f कार्यक्रम एक फ़्लोटिंग पॉइंट नंबर (अल्पविराम) की अपेक्षा करता है। वेरिएबल फ्लोट प्रकार का होना चाहिए।
6 %g, %G कार्यक्रम एक फ़्लोटिंग पॉइंट नंबर (अल्पविराम) की अपेक्षा करता है।वेरिएबल फ्लोट प्रकार का होना चाहिए।
7 %एक कार्यक्रम एक फ़्लोटिंग पॉइंट नंबर (अल्पविराम) की अपेक्षा करता है। वेरिएबल फ्लोट प्रकार का होना चाहिए।
8 %ओ कार्यक्रम एक अष्टक संख्या की अपेक्षा करता है। वेरिएबल int प्रकार का होना चाहिए।
9 %s प्रोग्राम एक स्ट्रिंग के दर्ज होने की प्रतीक्षा कर रहा है। एक स्ट्रिंग किसी भी वर्ण का एक सेट है जो पहले विभाजक वर्ण का सामना करना पड़ता है। वेरिएबल टाइप स्ट्रिंग का होना चाहिए।
10 %x, %X कार्यक्रम एक हेक्साडेसिमल संख्या की प्रतीक्षा कर रहा है। वेरिएबल int प्रकार का होना चाहिए।
11 %पी वेरिएबल पॉइंटर इनपुट की अपेक्षा करता है। वेरिएबल पॉइंटर टाइप का होना चाहिए।
12 %n वेरिएबल को एक पूर्णांक मान लिखता है जो स्कैनफ फ़ंक्शन द्वारा अब तक पढ़े गए वर्णों की संख्या के बराबर है।
13 %u

कार्यक्रम एक अहस्ताक्षरित पूर्णांक पढ़ता है। चर प्रकार अहस्ताक्षरित पूर्णांक होना चाहिए।

14 %ख कार्यक्रम बाइनरी नंबर की प्रतीक्षा कर रहा है। वेरिएबल int प्रकार का होना चाहिए।
15 % स्कैन किए गए कैरेक्टर सेट। कार्यक्रम पात्रों के प्रवेश की प्रतीक्षा कर रहा है।वर्ग कोष्ठक के बीच निर्दिष्ट सीमित पूल से। स्कैनफ तब तक काम करेगा जब तक इनपुट स्ट्रीम पर निर्दिष्ट सेट से वर्ण हैं।
16 %% हस्ताक्षर "%"।

प्रारूप स्ट्रिंग में वर्ण

सी++ कोड
सी++ कोड

तारे का चिन्ह ()

तारांकन () एक ध्वज है जो दर्शाता है कि असाइनमेंट ऑपरेशन को दबा दिया जाना चाहिए। "%" चिह्न के ठीक बाद एक तारांकन चिह्न लगाया जाता है। उदाहरण के लिए,


स्कैनफ ("%d%c%d", &x, &y); // दो पूर्णांकों के बीच वर्ण को अनदेखा करें। स्कैनफ ("% s%d% s", str, str2); // दो तारों के बीच पूर्णांक को अनदेखा करें।

अर्थात, यदि आप कंसोल में "45-20" लाइन दर्ज करते हैं, तो प्रोग्राम निम्न कार्य करेगा:

  1. चर "x" को मान 45 दिया जाएगा।
  2. चर "y" को 20 का मान दिया जाएगा।
  3. और माइनस साइन (डैश) "-" को "%c" की बदौलत नजरअंदाज कर दिया जाएगा।

चौड़ाई (या क्षेत्र की चौड़ाई)

यह "%" चिह्न और प्रारूप विनिर्देशक के बीच एक पूर्णांक है जो वर्तमान रीड ऑपरेशन में पढ़ने के लिए वर्णों की अधिकतम संख्या निर्दिष्ट करता है।


स्कैनफ ("% 20s", str); // इनपुट स्ट्रीम से पहले 20 अक्षर पढ़ें

कुछ महत्वपूर्ण बातों का ध्यान रखना चाहिए:

  1. स्कैनफ समाप्त हो जाएगा यदि यह एक विभाजक चरित्र का सामना करता है, भले ही उसने 20 वर्णों की गणना न की हो।
  2. यदि 20 से अधिक वर्ण इनपुट हैं, तो केवल पहले 20 वर्ण str में लिखे जाएंगे।

संशोधकप्रकार (या सटीक)

स्पलैश कोड
स्पलैश कोड

ये विशेष फ़्लैग हैं जो इनपुट के लिए अपेक्षित डेटा के प्रकार को संशोधित करते हैं। ध्वज निर्दिष्ट प्रकार के बाईं ओर निर्दिष्ट है:

  • L या l (छोटा L) जब "l" का उपयोग विनिर्देशक d, i, o, u, x के साथ किया जाता है, तो ध्वज प्रोग्राम को बताता है कि लंबे int इनपुट की उम्मीद है। ई या एफ विनिर्देशक के साथ "एल" का उपयोग करते समय, ध्वज प्रोग्राम को बताता है कि उसे दोहरे मूल्य की अपेक्षा करनी चाहिए। "एल" का उपयोग प्रोग्राम को बताता है कि एक लंबा डबल अपेक्षित है। "सी" और "एस" विनिर्देशों के साथ "एल" का उपयोग प्रोग्राम को बताता है कि wchar_t जैसे दो-बाइट वर्ण अपेक्षित हैं। उदाहरण के लिए, "%lc", "%ls", "%l[asd]".
  • h एक ध्वज है जो छोटे प्रकार को दर्शाता है।
  • hh - इंगित करता है कि चर एक हस्ताक्षरित चार या अहस्ताक्षरित चार मान का सूचक है। ध्वज का उपयोग विनिर्देशकों d, i, o, u, x, n के साथ किया जा सकता है।
  • ll (दो छोटे L's) - इंगित करता है कि वेरिएबल एक प्रकार के मान का सूचक है, जिस पर हस्ताक्षर किए गए long long int या unsigned long long int हैं। ध्वज का उपयोग विनिर्देशकों के साथ किया जाता है: d, i, o, u, x, n.
  • j - इंगित करता है कि चर stdint.h हेडर फ़ाइल से intmax_t या uintmax_t प्रकार का सूचक है। विनिर्देशों के साथ प्रयुक्त: d, i, o, u, x, n.
  • z - इंगित करता है कि चर size_t प्रकार का सूचक है, जिसकी परिभाषा stddef.h में है। विनिर्देशों के साथ प्रयुक्त: d, i, o, u, x, n.
  • t - इंगित करता है कि चर ptrdiff_t प्रकार का सूचक है। परिभाषा परयह प्रकार stddef.h में है। विनिर्देशों के साथ प्रयुक्त: d, i, o, u, x, n.

अधिक स्पष्ट रूप से, संशोधक वाले चित्र को एक तालिका के रूप में दर्शाया जा सकता है। प्रोग्रामर के लिए स्कैनफ सी का ऐसा विवरण स्पष्ट होगा।

विनिर्देशक और संशोधक टाइप करें
विनिर्देशक और संशोधक टाइप करें

अन्य पात्र

प्रारूप में आने वाले किसी भी वर्ण को छोड़ दिया जाएगा। साथ ही, यह ध्यान दिया जाना चाहिए कि नियंत्रण स्ट्रिंग में व्हाइटस्पेस या विभाजक वर्ण (न्यूलाइन, स्पेस, टैब) की उपस्थिति से फ़ंक्शन के विभिन्न व्यवहार हो सकते हैं। एक संस्करण में, स्कैनफ () किसी भी संख्या में विभाजकों को सहेजे बिना तब तक पढ़ेगा जब तक कि यह विभाजक के अलावा किसी अन्य चरित्र का सामना नहीं करता है, और दूसरे संस्करण में, रिक्त स्थान (केवल वे) एक भूमिका नहीं निभाते हैं और अभिव्यक्ति "%d + %d" "% d+%d" के बराबर है।

सी ++ कोड उदाहरण
सी ++ कोड उदाहरण

उदाहरण

आइए कुछ उदाहरण देखते हैं जो आपको सोचने और बेहतर ढंग से समझने में मदद करते हैं कि फ़ंक्शन कैसे काम करता है।


स्कैनफ ("% 3s", str); // यदि आप कंसोल में स्ट्रिंग "1d2s3d1;3" दर्ज करते हैं, तो केवल "1d2" str scanf("%dminus%d", &x, &y) पर लिखा जाएगा; // दो संख्याओं के बीच के माइनस कैरेक्टर को स्कैनफ ("% 5 [0-9]", स्ट्र); // वर्णों को str में तब तक दर्ज किया जाएगा जब तक कि 5 वर्ण न हों और वर्ण 0 से 9 तक की संख्याएँ हों। स्कैनफ़ ("% lf", और d); // डबल इनपुट स्कैनफ ("% एचडी", और एक्स) की अपेक्षा करें; // शॉर्ट स्कैनफ ("% hu", और y) प्रकार की अपेक्षित संख्या; // अहस्ताक्षरित संख्या लघु स्कैनफ ("एलएक्स", और जेड) की अपेक्षा करें; // लंबे इंट प्रकार की अपेक्षित संख्या

सेनीचे दिए गए उदाहरण दिखाते हैं कि विभिन्न प्रतीकों का उपयोग करके अपेक्षित संख्या कैसे बदलती है।

स्कैनफ सी - शुरुआती के लिए विवरण

यह खंड शुरुआती लोगों के लिए उपयोगी होगा। अक्सर आपके पास स्कैनफ सी का इतना पूरा विवरण नहीं होना चाहिए जितना कि यह विवरण कि फ़ंक्शन कैसे काम करता है।

  • यह सुविधा कुछ हद तक अप्रचलित है। विभिन्न संस्करणों के पुस्तकालयों में कई अलग-अलग कार्यान्वयन हैं। उदाहरण के लिए, बेहतर स्कैनफ एससी फ़ंक्शन, जिसका विवरण माइक्रोसॉफ्ट वेबसाइट पर पाया जा सकता है।
  • प्रारूप में निर्दिष्टकर्ताओं की संख्या फ़ंक्शन को दिए गए तर्कों की संख्या से मेल खाना चाहिए।
  • इनपुट स्ट्रीम तत्वों को केवल विभाजक वर्णों द्वारा अलग किया जाना चाहिए: स्पेस, टैब, नई लाइन। अल्पविराम, अर्धविराम, अवधि, आदि - ये वर्ण स्कैनफ़ () फ़ंक्शन के लिए विभाजक नहीं हैं।
  • अगर स्कैनफ का सामना एक सेपरेटर कैरेक्टर से होता है, तो इनपुट रोक दिया जाएगा। यदि पढ़ने के लिए एक से अधिक चर हैं, तो स्कैनफ़ अगले चर को पढ़ने के लिए आगे बढ़ेगा।
  • इनपुट डेटा प्रारूप में थोड़ी सी भी असंगति कार्यक्रम के अप्रत्याशित परिणामों की ओर ले जाती है। ठीक है, अगर प्रोग्राम सिर्फ एक त्रुटि के साथ समाप्त होता है। लेकिन अक्सर प्रोग्राम काम करना जारी रखता है और गलत करता है।
  • स्कैनफ ("%20s …", …); यदि इनपुट स्ट्रीम 20 वर्णों से अधिक है, तो स्कैनफ़ पहले 20 वर्णों को पढ़ेगा और या तो निरस्त कर देगा या अगले चर को पढ़ने के लिए आगे बढ़ेगा, यदि कोई निर्दिष्ट है। इस मामले में, स्कैनफ को अगली कॉल उस बिंदु से इनपुट स्ट्रीम को पढ़ना जारी रखेगी जहां स्कैनफ के लिए पिछली कॉल का काम बंद हो गया था। यदि पहले 20. पढ़ते समयवर्ण, एक सीमांकक वर्ण का सामना करना पड़ता है, स्कैनफ़ अगले चर को पढ़ना बंद कर देगा या पढ़ना जारी रखेगा, भले ही उसने पहले चर के लिए 20 वर्ण नहीं पढ़े हों। इस मामले में, सभी अपठित वर्ण अगले चर से जुड़े होंगे।
  • यदि स्कैन किए गए वर्णों का सेट "^" से शुरू होता है, तो स्कैनफ़ डेटा को तब तक पढ़ेगा जब तक कि वह सेट से एक सीमांकक वर्ण या वर्ण का सामना न करे। उदाहरण के लिए, "%[^A-E1-5]" स्ट्रीम से डेटा तब तक पढ़ेगा जब तक कि A से E तक के बड़े अक्षरों में से कोई एक या 1 से 5 तक की कोई संख्या सामने नहीं आ जाती।
  • स्कैनफ सी फ़ंक्शन, जैसा कि वर्णित है, वेरिएबल्स को लिखने की सफल संख्या के बराबर संख्या देता है। यदि स्कैनफ 3 चर लिखता है, तो फ़ंक्शन का सफलता परिणाम संख्या 3 लौटाएगा। यदि स्कैनफ कोई चर नहीं लिख सका, तो परिणाम 0 होगा। और, अंत में, यदि स्कैनफ किसी कारण से शुरू नहीं हो सका, तो परिणाम ईओएफ होगा।
  • अगर स्कैनफ () फंक्शन गलत तरीके से खत्म हुआ। उदाहरण के लिए, scanf("%d", &x) - एक संख्या अपेक्षित थी, लेकिन वर्ण इनपुट के रूप में प्राप्त हुए थे। अगला स्कैनफ () कॉल इनपुट स्ट्रीम में उस बिंदु पर शुरू होगा जहां पिछला फ़ंक्शन कॉल समाप्त हुआ था। इस समस्या को दूर करने के लिए समस्या पात्रों से छुटकारा पाना आवश्यक है। यह किया जा सकता है, उदाहरण के लिए, स्कैनफ ("%s") को कॉल करके। यही है, फ़ंक्शन वर्णों की एक स्ट्रिंग को पढ़ेगा और उसे फेंक देगा। इस मुश्किल तरीके से, आप आवश्यक डेटा दर्ज करना जारी रख सकते हैं।
  • स्कैनफ () के कुछ कार्यान्वयन में, स्कैन किए गए वर्ण सेट में "-" की अनुमति नहीं है।
  • "%c" स्पेसिफायर स्ट्रीम के हर कैरेक्टर को पढ़ता है। यानी यह सेपरेटर कैरेक्टर को भी पढ़ता है। सीमांकक वर्ण को छोड़ने और वांछित वर्ण को पढ़ना जारी रखने के लिए, आप "%1s" का उपयोग कर सकते हैं।
  • "सी" विनिर्देशक का उपयोग करते समय, चौड़ाई "%10c" का उपयोग करने की अनुमति है, लेकिन फिर प्रकार के तत्वों की एक सरणी को एक चर के रूप में स्कैनफ फ़ंक्शन में पारित किया जाना चाहिए।
  • “%[a-z]” का अर्थ है “अंग्रेज़ी वर्णमाला के सभी छोटे अक्षर”, और “%[z-a]” का अर्थ केवल 3 वर्ण हैं: 'z', 'a', '-'। दूसरे शब्दों में, "-" वर्ण का अर्थ केवल तभी होता है जब वह दो वर्णों के बीच सही क्रम में हो। यदि "-" किसी व्यंजक के अंत में, शुरुआत में, या उसके दोनों ओर वर्णों के गलत क्रम में है, तो यह केवल एक हाइफ़न वर्ण है, एक श्रेणी नहीं।
सी++ कोड
सी++ कोड

निष्कर्ष

यह स्कैनफ सी के विवरण को समाप्त करता है। छोटे कार्यक्रमों में काम करने और प्रक्रियात्मक प्रोग्रामिंग पद्धति का उपयोग करते समय यह एक अच्छी आसान सुविधा है। हालांकि, मुख्य नुकसान अप्रत्याशित त्रुटियों की संख्या है जो स्कैनफ का उपयोग करते समय हो सकती हैं। इसलिए, प्रोग्रामिंग करते समय स्कैनफ सी का विवरण आपकी आंखों के सामने सबसे अच्छा रखा जाता है। बड़ी व्यावसायिक परियोजनाओं में, iostreams का उपयोग किया जाता है, इस तथ्य के कारण कि उनके पास उच्च-स्तरीय क्षमताएं हैं, वे त्रुटियों को पकड़ने और संभालने में बेहतर हैं, और महत्वपूर्ण मात्रा में जानकारी के साथ भी काम करते हैं। यह भी ध्यान दिया जाना चाहिए कि रूसी में स्कैनफ सी का विवरण कई नेटवर्क स्रोतों पर उपलब्ध है, साथ ही इसके उदाहरण भी हैंउपयोग, समारोह की उम्र के कारण। इसलिए, यदि आवश्यक हो, तो आप हमेशा विषयगत मंचों पर उत्तर पा सकते हैं।

सिफारिश की:

संपादकों की पसंद

गुआंगज़ौ: जाने के लिए बाज़ार

"विंडोज स्ट्रीट": ग्राहकों और कर्मचारियों से फीडबैक, विंडो उत्पादों की स्थापना और गुणवत्ता

"उत्तरी" कार बाजार, ऊफ़ा: पता, खुलने का समय, नई और प्रयुक्त कारों का एक बड़ा चयन

सेंट पीटर्सबर्ग में स्टोर "डेकाथलॉन"

इवानोवो में केंद्रीय बाजार कहां है? तुम वहाँ क्या खरीद सकते हो?

सेवस्तोपोल में केंद्रीय बाजार। खुलने का समय और उत्पाद रेंज

दुबना में शॉपिंग सेंटर "मयक" - पूरे परिवार के लिए खरीदारी और मनोरंजन का केंद्र

पेटशॉप पेट स्टोर, सेंट पीटर्सबर्ग: कर्मचारी काम और नियोक्ता के बारे में समीक्षा करता है

"Tesli": कर्मचारी समीक्षा, काम करने की स्थिति, नियोक्ता और कंपनी के बारे में राय

थोक व्यापार किसी भी देश की अर्थव्यवस्था का एक महत्वपूर्ण तत्व है

कंप्यूटर सुपरमार्केट "Nyx": कर्मचारी समीक्षा, पते, प्रबंधन, वेतन

रूस में ईंधन पर उत्पाद शुल्क

मुक्त व्यापार नीति - यह क्या है? मुक्त व्यापार नीति के पक्ष और विपक्ष

बिक्री कैसे बढ़ाएं? इज़ाफ़ा के तरीके

एलीएक्सप्रेस निर्देश: माल कैसे ऑर्डर करें