C ++ البرنامج التعليمي: تعرف على المدخلات والمخرجات

click fraud protection

01

من 08

طريقة جديدة للإخراج

كود البرنامج
محلل مرور / صور غيتي

يحتفظ C ++ بالتوافق الخلفي العالي جدًا مع C ، وهكذا يمكن أن تدرج لتعطيك الوصول إلى printf () وظيفة للإخراج. ومع ذلك ، فإن I / O التي توفرها C ++ أقوى بشكل ملحوظ والأهم من ذلك أنها آمنة. لا يزال بإمكانك استخدامها أيضًا scanf () للإدخال ولكن ميزات أمان النوع التي توفرها C ++ تعني أن تطبيقاتك ستكون أكثر قوة إذا كنت تستخدم C ++.

في الدرس السابق ، تم التطرق إلى هذا بمثال استخدم cout. سنذهب هنا إلى عمق أكثر قليلاً نبدأ بالإخراج أولاً لأنه يميل إلى أن يكون أكثر استخدامًا من الإدخال.

توفر فئة iostream الوصول إلى الكائنات والأساليب التي تحتاجها لكل من المخرجات والمدخلات. فكر في إدخال / إخراج من حيث تدفقات البايت - إما الانتقال من التطبيق الخاص بك إلى ملف أو الشاشة أو الطابعة - التي يتم إخراجها أو من لوحة المفاتيح - هذا الإدخال.

الإخراج مع Cout

إذا كنت تعرف C ، فقد تعرف ذلك << يستخدم لتحويل البتات إلى اليسار. على سبيل المثال 3 << 3 هو 24. على سبيل المثال ، يعمل التحول الأيسر على مضاعفة القيمة ، بحيث تتضاعف 3 مناوبات يسرى في 8.

في C ++ ، << كان مثقلة في فئة ostream بحيث

instagram viewer
كثافة العمليات, تطفووأنواع السلاسل (ومتغيراتها - على سبيل المثال الزوجي) كلها مدعومة. هذه هي الطريقة التي تقوم بها بإخراج النص ، من خلال تجميع عناصر متعددة بين <<.>


cout << "Some Text" << intvalue << floatdouble << endl؛ 

بناء الجملة هذا ممكن لأن كل من << هو في الواقع استدعاء وظيفة والتي ترجع مرجع إلى ostream موضوع. لذلك خط مثل ما سبق هو في الواقع مثل هذا


cout. << ("بعض النص"). cout. << (intvalue) .cout. << (floatdouble) .cout. << (endl)؛ 

ج وظيفةprintf كان قادرًا على تنسيق الإخراج باستخدام "محددات التنسيق" مثل٪ d. في C ++ ، يستطيع cout أيضًا تنسيق الإخراج ولكن يستخدم طريقة مختلفة للقيام بذلك.

02

من 08

باستخدام Cout لتنسيق الإخراج

الكائن cout هو عضو في iostream مكتبة. تذكر أن هذا يجب أن يتم تضمينه مع


#تتضمن 

هذه المكتبة iostream مشتق من ostream (للإخراج) و istream للمدخلات.

التنسيق من إخراج النص يتم عن طريق إدراج المتلاعبين في دفق الإخراج.

ما هو مناور؟

إنها وظيفة يمكنها تغيير خصائص دفق الإخراج (والإدخال). في الصفحة السابقة رأينا ذلك << كانت وظيفة محمّلة بإرجاع إشارة إلى كائن الاستدعاء على سبيل المثال cout للإخراج أو سين للمدخلات. جميع المتلاعبين يقومون بهذا حتى يمكنك تضمينهم في الإخراج << أو الإدخال >>. سوف ننظر في المدخلات و >> في وقت لاحق في هذا الدرس.


عد << endl؛ 

endl هو مناور ينهي الخط (ويبدأ خطًا جديدًا). إنها وظيفة يمكن أن يطلق عليها أيضًا بهذه الطريقة.


endl (cout) ؛ 

على الرغم من أنك لن تفعل ذلك من الناحية العملية. يمكنك استخدامه مثل هذا.


cout << "بعض النص" << endl << endl؛ // سطرين فارغين. 

الملفات هي مجرد تيارات

شيء يجب أخذه في الاعتبار أنه مع حدوث الكثير من التطوير في هذه الأيام واجهة المستخدم الرسومية التطبيقات ، لماذا تحتاج إلى وظائف I / O النصية؟ ليس هذا فقط ل وحدة التحكم التطبيقات؟ حسنًا ، من المحتمل أن تقوم بإدخال ملف I / O ويمكنك استخدامه هناك أيضًا ، ولكن أيضًا ما يحتاج إلى الإخراج عادةً ما يحتاج إلى تنسيق. تعتبر التدفقات طريقة مرنة للغاية للتعامل مع المدخلات والمخرجات ويمكنها العمل

  • النص I / O. كما هو الحال في تطبيقات وحدة التحكم.
  • سلاسل. مفيد للتنسيق.
  • ملف I / O.

المتلاعبين مرة أخرى

على الرغم من أننا قد تم استخدام ostream الطبقة ، بل هو فئة مشتقة من ios الطبقة التي تستمد من ios_base. هذه الفئة الأجداد يحدد الجمهور المهام التي هي المتلاعبين.

03

من 08

قائمة Cout Manipulators

يمكن تعريف المتلاعبين في تدفقات الإدخال أو الإخراج. هذه هي الكائنات التي ترجع إشارة إلى الكائن ويتم وضعها بين أزواج <<. وأعلن معظم المتلاعبين في ، لكن endl, ينتهي و تدفق يأتي من . يأخذ العديد من المتلاعبين معلمة واحدة وهذه تأتي من .

إليك قائمة أكثر تفصيلاً.

من عند

  • endl - ينهي الخط ويدعو إلى التدفق.
  • ينتهي - إدراج '\ 0' ( لا شيء) في الدفق.
  • مسح - إجبار المخزن المؤقت على الإخراج مباشرة.

من عند . معظم أعلن في سلف . قمت بتجميعهم حسب الوظيفة وليس حسب الترتيب الأبجدي.

  • boolalpha - إدراج أو استخراج كائنات منطقية كـ "صواب" أو "خطأ".
  • noboolalpha - إدراج أو استخراج كائنات منطقية كقيم رقمية.
  • ثابت - إدراج قيم الفاصلة العائمة بتنسيق ثابت.
  • علمي - إدراج قيم الفاصلة العائمة في شكل علمي.
  • الداخلية - الداخلية تبرير.
  • اليسار - تبرير اليسار.
  • الحق - مبرر لليمين.
  • dec - إدراج أو استخراج قيم عدد صحيح بالتنسيق العشري.
  • hex - إدراج أو استخراج قيم عدد صحيح بالتنسيق الست عشري (أساسي 16).
  • oct - إدراج أو استخراج القيم في شكل ثماني (قاعدة 8).
  • noshowbase - لا بادئة القيمة مع قاعدتها.
  • showbase - قيمة البادئة مع قاعدتها.
  • noshowpoint - لا تُظهر الفاصلة العشرية إن لم تكن ضرورية.
  • showpoint - إظهار دائمًا العلامة العشرية عند إدراج قيم الفاصلة العائمة.
  • noshowpos - لا تدخل علامة الجمع (+) إذا كان الرقم> = 0.
  • showpos - قم بإدراج علامة الجمع (+) إذا كان الرقم> = 0.
  • noskipws - لا تخطي المسافة البيضاء الأولية عند الاستخراج.
  • skipws - تخطي المساحة البيضاء الأولية عند الاستخراج.
  • nouppercase - لا تستبدل الحروف الصغيرة بأحرف كبيرة.
  • الأحرف الكبيرة - استبدال الأحرف الصغيرة بمكافئات كبيرة.
  • unitbuf - فلوش العازلة بعد إدراج.
  • nounitbuf - لا تتدفق العازلة بعد كل إدراج.

04

من 08

أمثلة باستخدام Cout

// ex2_2cpp. # تضمين "stdafx.h" #تتضمناستخدام اسم للمحطة؛ int main (int argc، char * argv []) { cout.width (10) ؛ cout << right << "Test" << endl؛ cout << left << "Test 2" << endl؛ cout << داخلي << "اختبار 3" << endl؛ cout << endl؛ cout.precision (2) ؛ cout << 45.678 << endl؛ cout << أحرف كبيرة << "David" << endl؛ cout.precision (8) ؛ cout << علمية << endl؛ cout << 450678762345.123 << endl؛ cout << ثابت << endl؛ cout << 450678762345.123 << endl؛ cout << showbase << endl؛ cout << showpos << endl؛ cout << hex << endl؛ cout << 1234 << endl؛ cout << oct << endl؛ cout << 1234 << endl؛ cout << dec << endl؛ cout << 1234 << endl؛ cout << noshowbase << endl؛ cout << noshowpos << endl؛ cout.unsetf (ios:: uppercase)؛ cout << hex << endl؛ cout << 1234 << endl؛ cout << oct << endl؛ cout << 1234 << endl؛ cout << dec << endl؛ cout << 1234 << endl؛ العودة 0 ؛ }

الإخراج من هذا أدناه ، مع واحد أو اثنين من مسافات خط إضافي لإزالة الوضوح.

 اختبار. اختبار 2. اختبار 3. 46. ديفيد. 4.50678762E + 011. 450678762345.12299000. 0X4D2. 02322. +1234. 4d2. 2322. 1234. 

ملحوظة: على الرغم من الأحرف الكبيرة ، تتم طباعة David كـ David وليس DAVID. وذلك لأن الحروف الكبيرة تؤثر فقط على الناتج الناتج ، على سبيل المثال الأرقام المطبوعة في السداسي عشري. وبالتالي فإن إخراج سداسي عشري 4d2 هو 4D2 عندما تكون الأحرف الكبيرة قيد التشغيل.

أيضا ، فإن معظم هذه المتلاعبين وضعت في الواقع قليلا في العلم وأنه من الممكن ضبط هذا مباشرة مع

 cout.setf () 

ومسحها مع

 cout.unsetf () 

05

من 08

استخدام Setf و Unsetf لمعالجة تنسيق الإدخال / الإخراج

الوظيفة setf لديه اثنين مثقلة الإصدارات المبينة أدناه. في حين غير محدد فقط يمسح البتات المحددة.

 setf (قيم العلم) ؛ setf (flagvalues ​​، maskvalues) ؛ unsetf (قيم العلم) ؛ 

الأعلام المتغيرة مشتقة من ORing معا كل البتات التي تريدها مع |. لذلك إذا كنت تريد علمية ، بحروف كبيرة وبولابها ثم استخدم هذا. فقط البتات مرت في معامل يتم تعيين. يتم ترك البتات الأخرى دون تغيير.

 cout.setf (ios_base:: scientific | ios_base:: uppercase | ios_base:: boolalpha)؛ cout << hex << endl؛ 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. 

اخفاء بت

الاثنان معامل يستخدم الإصدار من setf قناع. إذا تم ضبط البت في المعلمتين الأولى والثانية ، فسيتم ضبطها. إذا كانت البتة في المعلمة الثانية فقط ، فسيتم مسحها. القيم adjustfield ، basefield و floatfield (المدرجة أدناه) هي أعلام مركبة ، وهذا هو عدة أعلام أو سويا. إلى عن على الأساس مع القيم 0x0e00 بالضبط مثل ديسمبر | أكتوبر | عرافة. وبالتالي

 setf (ios_base:: hex، ios_basefield)؛ 

مسح جميع الأعلام الثلاثة ثم مجموعات عرافة. بالمثل adjustfield يكون اليسار | الحق | داخلي و floatfield يكون علمي | ثابت.

قائمة البتات

يتم أخذ قائمة التعدادات هذه من Microsoft Visual C ++ 6.0. القيم الفعلية المستخدمة تعسفية - قد يستخدم مترجم آخر قيمًا مختلفة.

 skipws = 0x0001. unitbuf = 0x0002. أحرف كبيرة = 0x0004. showbase = 0x0008. showpoint = 0x0010. showpos = 0x0020. اليسار = 0x0040. الصحيح = 0x0080. داخلي = 0x0100. ديسمبر = 0x0200. أكتوبر = 0x0400. عرافة = 0x0800. علمي = 0x1000. ثابت = 0x2000. boolalpha = 0x4000. adjustfield = 0x01c0. basefield = 0x0e00 ، floatfield = 0x3000. _Fmtmask = 0x7fff ، _Fmtzero = 0. 

06

من 08

حول تسد وسير

مثل كوت, تسد و cerr هي كائنات محددة مسبقا في ostream. الطبقة iostream يرث من كليهما ostream و istream ولهذا السبب كوت أمثلة يمكن استخدامها iostream.

مخزنة و غير مصقول

  • مخزنة مؤقتًا - يتم تخزين جميع المخرجات مؤقتًا في ملف متعادل ثم ملقاة على الشاشة دفعة واحدة. كلا cout و تسد يتم تخزينها مؤقتا.
  • Unbuffered- يذهب كل الإخراج على الفور إلى جهاز الإخراج. مثال على كائن غير مصقول هو cerr.

يوضح المثال أدناه أن cerr يُستخدم بنفس طريقة cout.


#تتضمن استخدام اسم للمحطة؛ int _tmain (int argc ، _TCHAR * argv []) {cerr.width (15) ؛ cerr.right cerr << "Error" << endl؛ العودة 0 ؛ }

المشكلة الرئيسية مع التخزين المؤقت ، إذا كان برنامج تعطل ثم يتم فقد محتويات المخزن المؤقت ومن الصعب معرفة سبب تحطمها. الإخراج غير المحظوظ فوري ، لذا فقد يكون استخدام بعض الأسطر مثل هذا خلال الكود مفيدًا.

 cerr << "الدخول إلى الوظيفة الخطرة zappit" << endl؛ 

مشكلة التسجيل

يمكن أن يكون إنشاء سجل لأحداث البرنامج طريقة مفيدة لاكتشاف الأخطاء الصعبة - النوع الذي يحدث فقط بين الحين والآخر. إذا كان هذا الحدث في حالة تعطل ، فأنت تواجه مشكلة - هل تقوم بمسح السجل إلى القرص بعد كل مكالمة حتى تتمكن من رؤية الأحداث مباشرة حتى الانهيار أو احتفظ به في مخزن مؤقت وقم بمسح المخزن المؤقت بشكل دوري وآمل ألا تخسر الكثير عند حدوث العطل يحدث؟

07

من 08

باستخدام Cin للإدخال: الإدخال المنسق

هناك نوعان من المدخلات.

  • منسق. قراءة الإدخال كأرقام أو من نوع معين.
  • غير منسق. قراءة بايت أو سلاسل. هذا يعطي سيطرة أكبر بكثير على دفق الإدخال.

هنا مثال بسيط للإدخال المنسق.

 // excin_1.cpp: يحدد نقطة الدخول لتطبيق وحدة التحكم. # تتضمن "stdafx.h" // Microsoft فقط. #تتضمن استخدام اسم للمحطة؛ int main (int argc، char * argv []) { int a = 0 ؛ تعويم ب = 0.0 ؛ int c = 0 ؛ cout << "الرجاء إدخال int و float و int مفصولة بمسافات" <> أ >> ب >> ج ؛ cout << "لقد أدخلت" << a << "" << b << "" << c << endl؛ العودة 0 ؛ }

يستخدم هذا cin لقراءة ثلاثة أرقام (كثافة العمليات, تطفو، int) مفصولة بمسافات. يجب الضغط على مفتاح الإدخال بعد كتابة الرقم.

3 7.2 3 سيخرج "لقد أدخلت 3 7.2 3".

الإدخال المنسق له قيود!

إذا أدخلت 3.76 5 8 ، فستحصل على "لقد أدخلت 3 0.76 5" ، فستفقد جميع القيم الأخرى على ذلك السطر. أن يتصرف بشكل صحيح ، مثل. ليس جزءًا من int وبالتالي يشير إلى بداية الطفو.

خطأ في الملائمة

يقوم كائن cin بتعيين بت فشل إذا لم يتم تحويل الإدخال بنجاح. هذا الجزء جزء منه ios ويمكن قراءتها باستخدام فشل() تعمل على حد سواء سين و كوت مثله.

 إذا (cin.fail ()) // افعل شيئًا. 

بشكل غير مفاجئ، cout.fail () نادرًا ما يتم تعيينه ، على الأقل على إخراج الشاشة. في درس لاحق حول ملف I / O ، سنرى كيف cout.fail () يمكن أن تصبح حقيقة. هنالك أيضا جيد() وظيفة سين, كوت إلخ

instagram story viewer