01
08 के
आउटपुट के लिए एक नया तरीका
C ++, C के साथ बहुत पीछे की ओर संगतता बनाए रखता है
पिछले पाठ में, इसे एक उदाहरण के साथ स्पर्श किया गया था जिसमें cout का उपयोग किया गया था। यहां हम आउटपुट के साथ शुरू होने वाली थोड़ी अधिक गहराई में जाएंगे क्योंकि यह इनपुट की तुलना में अधिक उपयोग किया जाता है।
Iostream वर्ग उन वस्तुओं और विधियों तक पहुँच प्रदान करता है जिनकी आपको आउटपुट और इनपुट दोनों की आवश्यकता होती है। बाइट्स की धाराओं के संदर्भ में i / o के बारे में सोचें- या तो आपके एप्लिकेशन से किसी फ़ाइल, स्क्रीन या प्रिंटर पर जा रहा है - यह आउटपुट है, या कीबोर्ड से - यह इनपुट है।
Cout के साथ आउटपुट
यदि आप C जानते हैं, तो आप यह जान सकते हैं << बिट्स को बाईं ओर शिफ्ट करने के लिए उपयोग किया जाता है। उदाहरण 3 << 3 24 है। ईजी लेफ्ट शिफ्ट वैल्यू दोगुनी हो जाती है इसलिए 3 लेफ्ट शिफ्ट इसे 8 से गुणा करते हैं।
C ++ में, << हो गया अतिभारित ओस्ट्रीम क्लास में ताकि पूर्णांक, नाव, और तार प्रकार (और उनके प्रकार- जैसे युगल) सभी समर्थित हैं। यह है कि आप टेक्स्ट आउटपुट कैसे करते हैं, << के बीच कई आइटम्स को एक साथ स्ट्रिंग करके।
cout << "कुछ पाठ" << intvalue << floatdouble << endl;
यह अजीब सिंटैक्स संभव है क्योंकि प्रत्येक << वास्तव में एक फ़ंक्शन कॉल है जो एक रिटर्न देता है संदर्भ एक ऑस्ट्रीम को वस्तु. तो ऊपर की तरह एक लाइन वास्तव में इस तरह है
cout। << ("कुछ पाठ")। cout। << (परिचय)।
द सी समारोहprintf % d जैसे प्रारूप विनिर्देशक का उपयोग करके आउटपुट स्वरूपित करने में सक्षम था। C ++ में cout भी आउटपुट फॉर्मेट कर सकता है लेकिन इसे करने के एक अलग तरीके का उपयोग करता है।
02
08 के
Cout को Format Output में इस्तेमाल करना
ऑब्जेक्ट कौट का सदस्य है iostream पुस्तकालय। याद रखें कि यह एक के साथ शामिल किया जाना है
#शामिल
यह पुस्तकालय iostream से लिया गया है ostream (आउटपुट के लिए) और IStream इनपुट के लिए
का प्रारूपण टेक्स्ट आउटपुट आउटपुट मैनिपुलेटर्स को आउटपुट स्ट्रीम में सम्मिलित करके किया जाता है।
एक जोड़तोड़ क्या है?
यह एक ऐसा फ़ंक्शन है जो आउटपुट (और इनपुट) स्ट्रीम की विशेषताओं को बदल सकता है। पिछले पृष्ठ पर हमने देखा कि << एक अतिभारित फ़ंक्शन था जिसने कॉलिंग ऑब्जेक्ट उदा। आउटपुट के लिए cout या इनपुट के लिए cin। सभी मैनिपुलेटर्स ऐसा करते हैं ताकि आप उन्हें आउटपुट में शामिल कर सकें << या इनपुट >>. हम इनपुट और देखेंगे >> बाद में इस पाठ में।
गिनती << एंडल;
endl एक जोड़तोड़ है जो लाइन को समाप्त करता है (और एक नया शुरू करता है)। यह एक फ़ंक्शन है जिसे इस तरह से भी कहा जा सकता है।
एंडल (cout);
हालांकि व्यवहार में आप ऐसा नहीं करेंगे। आप इसे इस तरह से उपयोग करें।
cout << "कुछ पाठ" << endl << endl; // दो खाली लाइनें।
फाइलें सिर्फ धाराएं हैं
कुछ को ध्यान में रखना है कि इन दिनों बहुत विकास के साथ किया जा रहा है जीयूआई अनुप्रयोग, आपको पाठ I / O फ़ंक्शन की आवश्यकता क्यों होगी? है कि बस के लिए नहीं है कंसोल अनुप्रयोग? वैसे आप शायद फाइल I / O करेंगे और आप उन्हें वहां भी उपयोग कर सकते हैं लेकिन स्क्रीन पर आउटपुट क्या है आमतौर पर स्वरूपण की भी जरूरत होती है। धाराएँ इनपुट और आउटपुट को संभालने का एक बहुत ही लचीला तरीका हैं और इसके साथ काम कर सकती हैं
- पाठ I / O कंसोल अनुप्रयोगों में के रूप में।
- स्ट्रिंग्स। प्रारूपण के लिए आसान।
- फ़ाइल I / O।
मैनिपुलेटर फिर से
यद्यपि हम इसका उपयोग करते रहे हैं ostream वर्ग, यह एक है व्युत्पन्न वर्ग वहाँ से ios वर्ग जो से प्राप्त होता है ios_base. यह पूर्वज वर्ग जनता को परिभाषित करता है कार्यों जो जोड़तोड़ कर रहे हैं।
03
08 के
Cout Manipulators की सूची
मैनिपुलेटर को इनपुट या आउटपुट स्ट्रीम में परिभाषित किया जा सकता है। ये ऐसी वस्तुएं हैं जो ऑब्जेक्ट के संदर्भ में लौटती हैं और इनकी जोड़ी के बीच रखी जाती हैं <<. अधिकांश जोड़तोड़ में घोषित किए जाते हैं, परंतु endl, समाप्त होता है तथा लालिमा से आते हैं
यहाँ एक अधिक विस्तृत सूची है।
से
- एंडल - लाइन समाप्त करता है और फ्लश कहता है।
- समाप्त - '0' सम्मिलित करता है ( शून्य) धारा में।
- फ्लश - बफर को तुरंत आउटपुट होने के लिए मजबूर करें।
से . में घोषित किए जाते हैं
- boolalpha - "true" या "false" के रूप में bool ऑब्जेक्ट्स डालें या निकालें।
- noboolalpha - संख्यात्मक मूल्यों के रूप में बूल ऑब्जेक्ट सम्मिलित करें या निकालें।
- फिक्स्ड - फिक्स्ड फॉर्मेट में फ्लोटिंग-पॉइंट वैल्यू डालें।
- वैज्ञानिक - वैज्ञानिक प्रारूप में फ्लोटिंग-पॉइंट मान डालें।
- आंतरिक - आंतरिक-औचित्य।
- बायाँ - वाम-औचित्य।
- सही - सही-सही।
- दशमलव प्रारूप में पूर्णांक मान डालें या निकालें।
- हेक्स - हेक्साडेसिमल (बेस 16) प्रारूप में पूर्णांक मान डालें या निकालें।
- ऑक्ट - ऑक्टल (बेस 8) प्रारूप में मान डालें या निकालें।
- noshowbase - इसके आधार के साथ उपसर्ग मूल्य न करें।
- showbase - इसके आधार के साथ उपसर्ग मान।
- noshowpoint - यदि आवश्यक न हो तो दशमलव बिंदु न दिखाएँ।
- शो-पॉइंट - फ़्लोटिंग-पॉइंट मान सम्मिलित करते समय हमेशा दशमलव बिंदु दिखाएँ।
- noshowpos - यदि नंबर> = 0 हो तो प्लस चिन्ह (+) न डालें।
- showpos - नंबर> = 0 होने पर प्लस साइन (+) डालें।
- noskipws - निकालने पर शुरुआती सफेद स्थान को न छोड़ें।
- स्किप्वर्स - निकालने पर शुरुआती सफेद स्थान छोड़ें।
- nouppercase - अपरकेस समकक्षों द्वारा लोअरकेस अक्षरों को प्रतिस्थापित न करें।
- अपरकेस - अपरकेस द्वारा लोअरकेस अक्षरों को बदलें।
- यूनिटबुफ - एक डालने के बाद फ्लश बफर।
- संज्ञा - प्रत्येक डालने के बाद बफर फ्लश न करें।
04
08 के
Cout का उपयोग करने वाले उदाहरण
// ex2_2cpp। #include "stdafx.h" #शामिलनेमस्पेस एसटीडी का उपयोग करना; int main (int argc, char * argv []) { cout. उपलब्धता (10); cout << सही << "परीक्षण" << endl; cout << छोड़ दिया << "Test 2" << endl; cout << आंतरिक << "टेस्ट 3" << endl; cout << एंडल; cout.prepret (2); cout << 45.678 << endl; cout << अपरकेस << "डेविड" << endl; cout.prepret (8); cout << वैज्ञानिक << endl; cout << 450678762345.123 << endl; cout << स्थिर << endl; cout << 450678762345.123 << endl; cout << showbase << endl; cout << showpos << एंडल; cout << हेक्स << एंडल; cout << 1234 << endl; cout << अक्टूबर << एंडल; cout << 1234 << endl; cout << dec << << endl; cout << 1234 << endl; cout << noshowbase << endl; cout << noshowpos << endl; cout.unsetf (ios:: uppercase); cout << हेक्स << एंडल; cout << 1234 << endl; cout << अक्टूबर << एंडल; cout << 1234 << endl; cout << dec << << endl; cout << 1234 << endl; वापसी 0; }
इसमें से आउटपुट नीचे है, जिसमें स्पष्टता के लिए एक या दो अतिरिक्त लाइन रिक्त स्थान हैं।
परीक्षा। परीक्षण २। परीक्षण ३। 46. डेविड। 4.50678762E + 011। 450678762345.12299000. 0X4D2। 02322. +1234. 4d2। 2322. 1234.
टिप्पणी: अपरकेस के बावजूद, डेविड को डेविड के रूप में छापा जाता है, न कि डेविड को। ऐसा इसलिए है क्योंकि अपरकेस केवल उत्पन्न आउटपुट को प्रभावित करता है- उदा। में छपे नंबर हेक्साडेसिमल. जब अपरकेस ऑपरेशन में है तो हेक्स आउटपुट 4d2 4D2 है।
इसके अलावा, इनमें से अधिकांश मैनिपुलेटर वास्तव में एक ध्वज में थोड़ा सा सेट करते हैं और इसे सीधे इसके साथ सेट करना संभव है
cout.setf ()
और इसे साफ़ करें
cout.unsetf ()
05
08 के
I / O स्वरूपण में हेरफेर करने के लिए Setf और Unsetf का उपयोग करना
कार्यक्रम setf के पास दो हैं अतिभारित नीचे दिखाए गए संस्करण। जबकि unsetf बस निर्दिष्ट बिट्स को साफ करता है।
सेटफ (ध्वजवाहक); सेटफ (ध्वजवाहक, मुखौटे); unsetf (flagvalues);
चर झंडे द्वारा व्युत्पन्न है oring एक साथ सभी बिट्स जो आप चाहते हैं | तो अगर तुम चाहो वैज्ञानिक, अपरकेस और बूलल्प तो इस का उपयोग करें। केवल बिट्स के रूप में पारित पैरामीटर तैयार। अन्य बिट्स अपरिवर्तित छोड़ दिए जाते हैं।
cout.setf (ios_base:: वैज्ञानिक | ios_base:: uppercase | ios_base:: boolalpha); cout << हेक्स << एंडल; cout << 1234 << endl; cout << dec << << endl; cout << 123400003744.98765 << endl; बूल मूल्य = सत्य; cout << value << endl; cout.unsetf (ios_base:: boolalpha); cout << value << endl;
का उत्पादन
4D2। 1.234000E + 011। सच। 1.
मास्किंग बिट्स
दो पैरामीटर सेटफ का संस्करण मास्क का उपयोग करता है। यदि बिट पहले और दूसरे दोनों मापदंडों में सेट है तो यह सेट हो जाता है। यदि बिट केवल दूसरे पैरामीटर में है, तो इसे मंजूरी दे दी गई है। मूल्य एडजस्टफील्ड, बेसफ़ील्ड तथा floatfield (नीचे सूचीबद्ध) मिश्रित झंडे हैं, जो कई झंडे हैं Or'd साथ में। के लिये basefield मूल्यों के साथ 0x0e00 के समान है dec | अष्ट | हेक्स. इसलिए
setf (ios_base:: hex, ios_basefield);
तीनों झंडे साफ करता है फिर सेट करता है हेक्स. उसी प्रकार adjustfield है छोड़ दिया | सही | अंदर का तथा floatfield है वैज्ञानिक | तय.
बिट्स की सूची
एनमों की यह सूची Microsoft Visual C ++ 6.0 से ली गई है। उपयोग किए जाने वाले वास्तविक मूल्य मनमानी हैं- एक अन्य संकलक विभिन्न मूल्यों का उपयोग कर सकता है।
स्किप्स = 0x0001। Unitbuf = 0x0002। अपरकेस = 0x0004। शोबेस = 0x0008। शो पॉइंट = 0x0010। showpos = 0x0020 बाएँ = 0x0040। दाएं = 0x0080। आंतरिक = 0x0100। dec = 0x0200। oct = 0x0400 हेक्स = 0x0800। वैज्ञानिक = 0x1000। तय = 0x2000। बूलल्प = 0x4000। एडजस्टफील्ड = 0x01c0। basefield = 0x0e00, floatfield = 0x3000। _Ftmask = 0x7fff, _Fmtzero = 0।
06
08 के
Clog और Cerr के बारे में
पसंद अदालत, रोकना तथा cerr ओस्ट्रीम में परिभाषित पूर्व-निर्धारित वस्तुएं हैं। Iostream वर्ग को दोनों से विरासत में मिला है ostream तथा IStream इसलिए ऐसा है अदालत उदाहरण का उपयोग कर सकते हैं iostream.
बफर्ड और अनबफर्ड
- बफर - सभी आउटपुट अस्थायी रूप से एक में संग्रहीत होते हैं बफर और फिर एक ही बार में स्क्रीन पर फेंक दिया। दोनों cout और clog बफ़र्ड हैं।
- Unbuffered- सभी आउटपुट आउटपुट डिवाइस पर तुरंत जाते हैं। एक अप्रमाणित वस्तु का एक उदाहरण cerr है।
नीचे दिए गए उदाहरण से पता चलता है कि cerr उसी तरह से cout के रूप में उपयोग किया जाता है।
#शामिल नेमस्पेस एसटीडी का उपयोग करना; int _tmain (int argc, _TCHAR * argv []) {cerr.width (15); cerr.right; cerr << "त्रुटि" << endl; वापसी 0; }
बफरिंग के साथ मुख्य समस्या, अगर है कार्यक्रम क्रैश तब बफर सामग्री खो जाती है और यह देखना मुश्किल है कि यह दुर्घटनाग्रस्त क्यों हुआ। असंबद्ध उत्पादन तत्काल होता है इसलिए कोड के माध्यम से कुछ पंक्तियों को इस तरह छिड़कना उपयोगी हो सकता है।
cerr << "खतरनाक कार्य zappit में प्रवेश करना" << endl;
लॉगिंग समस्या
कार्यक्रम की घटनाओं के एक लॉग का निर्माण करना मुश्किल कीड़े को स्पॉट करने का एक उपयोगी तरीका हो सकता है- जो कि केवल अब और तब होता है। अगर वह घटना एक दुर्घटना है, तो आपको समस्या है- क्या आप हर कॉल के बाद लॉग को डिस्क में फ्लश करते हैं ताकि आप घटनाओं को देख सकें क्रैश तक सही है या इसे एक बफर में रखें और समय-समय पर बफर को फ्लश करें और उम्मीद करें कि क्रैश होने पर आप बहुत अधिक न खोएं होता है?
07
08 के
इनपुट के लिए सिने का उपयोग करना: प्रारूपित इनपुट
इनपुट दो प्रकार के होते हैं।
- प्रारूपित। इनपुट को संख्या या एक निश्चित प्रकार के रूप में पढ़ना।
- अस्वरूपित। बाइट्स पढ़ना या तार. यह इनपुट स्ट्रीम पर बहुत अधिक नियंत्रण देता है।
यहाँ स्वरूपित इनपुट का एक सरल उदाहरण है।
// excin_1.cpp: कंसोल एप्लिकेशन के लिए प्रवेश बिंदु को परिभाषित करता है। # केवल "stdafx.h" // Microsoft को हटा दें। #शामिल नेमस्पेस एसटीडी का उपयोग करना; int main (int argc, char * argv []) { int a = 0; फ्लोट बी = 0.0; int c = 0; cout << "कृपया एक इंट, एक फ्लोट और इंट को रिक्त स्थान से अलग करें" <> ए >> बी >> सी; cout << "आपने" << a << "" << b << "" << c << endl; वापसी 0; }
यह तीन नंबर पढ़ने के लिए सिनेमा का उपयोग करता है (पूर्णांक, नाव, int) रिक्त स्थान द्वारा अलग किया गया। नंबर लिखने के बाद आपको एंटर दबाना होगा।
3 7.2 3 आउटपुट होगा "आपने 3 7.2 3 में प्रवेश किया"।
प्रारूपित इनपुट में सीमाएँ हैं!
यदि आप 3.76 5 8 दर्ज करते हैं, तो आपको "आपने 3 0.76 5 दर्ज किया है", उस पंक्ति के अन्य सभी मान खो गए हैं। यह सही व्यवहार कर रहा है, के रूप में। इंट का हिस्सा नहीं है और इसलिए फ्लोट की शुरुआत को चिह्नित करता है।
फँसाने में त्रुटि
यदि इनपुट सफलतापूर्वक परिवर्तित नहीं किया गया था, तो सिने ऑब्जेक्ट विफल रहता है। यह बिट का हिस्सा है ios और के उपयोग से पढ़ा जा सकता है विफल () दोनों पर कार्य CIN तथा अदालत इस तरह।
if (Cin.fail ()) // कुछ करें।
आश्चर्य की बात नहीं है, cout.fail () कम से कम स्क्रीन आउटपुट पर सेट किया गया है। फ़ाइल I / O के बाद के पाठ में, हम देखेंगे कि कैसे cout.fail () सत्य बन सकता है। वहाँ भी है एक अच्छा() के लिए कार्य करते हैं CIN, अदालत आदि।