إدارة وحدة التحكم مع فئات iostream في C ++

Managing Console With Iostream Classes C



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

من المتوقع أن يعرف القارئ بالفعل كيفية استخدام موجه الأوامر أو الجهاز الطرفي. تشرح هذه المقالة كيفية قراءة الأحرف والسلاسل من لوحة المفاتيح وإرسال الأحرف والسلاسل إلى الجهاز الطرفي (أو موجه الأوامر). يحتاج كل مبرمج C ++ إلى معرفته في هذه المقالة.







من أجل الحصول على مدخلات من لوحة المفاتيح وإخراج إلى الجهاز ، يجب أن يبدأ البرنامج بـ:



#يشمل
استخدام مساحة الاسمساعات؛

محتوى المادة

كائنات التدفق الضيق لتيار iostream القياسي

تم إنشاء فئة iostream ، والكائنات القياسية ، و cout ، و cin ، و cerr ، و clog ، وهي موجودة بالفعل في المكتبة القياسية. يستخدمها المبرمج فقط دون إنشاء مثيل لها مرة أخرى.



كلفة

العبارة التالية في الدالة main () ترسل النص ، هذا هو الإخراج. إلى المحطة:





كلفة << 'هذا هو الإخراج'.؛

cout هو كائن إخراج iostream في المكتبة القياسية ، تم إنشاء مثيل له بالفعل.<< is the insertion operator, which sent the bytes, This is output. to the output stream object, cout. When the statement is executed, the text appears on the screen.

مع العبارة أعلاه ، يظهر موجه الأوامر المعاد عرضه على يمين عبارة الإخراج. لا ينتقل إلى السطر التالي. endl في نهاية العبارة التالية ستجبر كل ما تتم طباعته على الشاشة على السطر التالي:



كلفة << 'هذا هو الإخراج'. <<endl؛

endl هو متغير محدد مسبقًا. يمكن أيضًا إجبار محتوى الشاشة على السطر التالي باستخدام:

كلفة << 'هذا هو الإخراج'. << 'ن'؛

باستخدام ' n' ، قد تظل جميع أسطر النص غير ظاهرة على الشاشة على الفور. يقوم endl بمسح سطر النص بالكامل على الشاشة.

ملحوظة: السلسلة المرسلة إلى cout تكون بين علامتي اقتباس مزدوجتين ، في حين أن الحرف المرسل يكون بين علامتي اقتباس منفردتين. يمكن إرسال سلسلة من الجمل والأحرف في بيان واحد ، يسبق كل منها<< . All that will appear in one line at the output if ‘ ’ is not in the series.

شرك

cin هو كائن إدخال iostream القياسي ، والذي تم إنشاء مثيل له بالفعل ، ومتوفر في المكتبة القياسية. ضع في اعتبارك مقطع الكود التالي في دالة main ():

شاررسالة قصيرة[خمسون]؛
كلفة << 'أدخل كلمة واضغط على Enter:' رسالة قصيرة؛
كلفة <<رسالة قصيرة<<endl؛

تعلن العبارة الأولى عن مصفوفة فارغة من 50 حرفًا. العبارة الثانية ترشد المستخدم إلى كتابة كلمة في سطر الشاشة التالي والضغط على مفتاح Enter. لاحظ استخدام 'endl' الذي يجبر المستخدم على إدخال نص في السطر التالي من الشاشة. أثناء كتابة المستخدم للنص ، يتردد صدى النص المدخل على الشاشة أثناء انتقاله إلى كائن cin. بعد الضغط على Enter ، يتم تنفيذ العبارة الثالثة في مقطع الكود. هذه العبارة الثالثة ترسل النص المدخل إلى المتغير ، txt. يجب ألا يزيد النص الذي تم إدخاله عن 50 حرفًا في هذه الحالة. لاحظ استخدام عامل الاستخراج ، >>. البيان الأخير يعرض النص المدخل على الشاشة.

يمكن أن تأخذ cin أكثر من كلمة واحدة من لوحة المفاتيح ، مفصولة بمسافات. يجب استخراج هذه الكلمات في متغيرات مختلفة. يوضح مقطع الكود التالي هذا:

شاررسالة قصيرة[عشرين]؛
intهو - هي؛
تطفوقدم؛
كلفة << 'أدخل 3 قيم واضغط على Enter:' رسالة قصيرة>>هو - هي>>قدم؛
كلفة <<رسالة قصيرة<< ' <<هو - هي<< ' <<قدم<<endl؛

لاحظ البيان:

شرك >>رسالة قصيرة>>هو - هي>>قدم؛

يتم استخراج الكلمة الأولى إلى txt ، والكلمة التي تليها ، والأخيرة إلى ft. إذا كان الإدخال ،

واحد25 3.6

ثم سيكون الناتج من خلال مقطع الرمز ،

واحد25 3.6

سير

البرنامج التالي به خطأ:

#يشمل
استخدام مساحة الاسمساعات؛

intالأساسية()
{
في myInt؛

إرجاع 0؛
}

العبارة الأولى في main () غير صحيحة. إذا كان اسم الملف الذي يحتوي على الرمز هو temp.cc وكان الملف التنفيذي الناتج يسمى temp ، فسيرسل الأمر g ++ التالي رسالة خطأ المترجم إلى الملف ، error.txt:

ز++ -o درجة الحرارة.العاصمة 2>خطأ.رسالة قصيرة

إذا كان الملف error.txt غير موجود ، فسيتم إنشاؤه. لاحظ الجزء 2> error.txt من الأمر g ++.

الشاشة هي وجهة الإخراج القياسية ، وهي أيضًا وجهة الخطأ القياسية. إذا تم حذف 2> error.txt من الأمر g ++ ، فسيتم إرسال رسالة خطأ المحول البرمجي إلى وجهة الخطأ القياسية ، والتي لا تزال الشاشة (الشاشة).

كائن الدفق الذي يمثل وجهة الإخراج القياسية هو cout. كائن الدفق الذي يمثل وجهة الخطأ القياسية هو cerr. يمكن إرسال خطأ وقت تشغيل البرنامج إلى الشاشة كما يلي:

سير << 'رسالة الخطأ!' << 'ن'؛

تسد

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

شاررسالة قصيرة[خمسون]؛
كلفة<<'أدخل نصًا واضغط على Enter:'رسالة قصيرة؛
تسد<<رسالة قصيرة<<endl؛

إذا كان نص الإدخال هو 'input_text' ، فإن clog سيعيد عرض 'input_text' إلى الشاشة.

في الممارسة العملية ، يتم عادةً إعادة توجيه التسجيل إلى ملف. البرنامج التالي يوضح هذا:

#يشمل
استخدام مساحة الاسمساعات؛

intالأساسية()
{
مجاني( 'log.txt'و'في'وstdout)؛

كلفة << 'أدخل نصآ' <<endl؛
}

لاحظ استخدام الدالة freopen () وحججها. الوسيطة الأولى لها هي اسم ملف السجل. إذا كان الملف غير موجود ، فسيتم إنشاؤه. الحجة الثانية لها هي 'w' لـ 'write'. الحجة الثالثة لها هي stdout للمخرجات القياسية. العبارة الثانية في الدالة main () تستخدم cout لإرسال نص التسجيل إلى الملف. ملاحظة: لم يتم عرض رمز الإدخال الفعلي في هذا البرنامج.

الحصول على أحرف وسلاسل من لوحة المفاتيح

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

الكائن السينمائي له طرق يهتم بها هذا القسم.

قراءة الحرف الأول

الحصول على (char_type & c):
يوضح مقطع الكود التالي كيفية قراءة الحرف الأول من المخزن المؤقت لتيار الإدخال:

شارالفصل؛
كلفة << 'أدخل نصآ:' <<endl؛
شرك.احصل على(الفصل)؛
كلفة <<الفصل<<endl؛

يعلن البيان الأول عن حرف بدون إسناد. العبارة الثانية تخبر المستخدم بإدخال حرف. عندما يكتب المستخدم حرفًا ويضغط على المفتاح Enter ، فإن العبارة الثالثة تنسخ الحرف من المخزن المؤقت لتدفق الإدخال إلى المتغير ، ch.

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

احصل على():
get () بدون وسيطة ، تُرجع رمز ASCII العشري. ضع في اعتبارك مقطع الكود التالي:

كلفة << 'أدخل نصآ:' <<endl؛
كلفة << شرك.احصل على() <<endl؛

إذا كان الإدخال 'asdfg' ، فسيتم إرجاع 97 ، وهو رمز ASCII العشري لـ 'a'.

الحصول على (char_type * s، streamsize n)

بعد أن يقوم المستخدم بإدخال عبارة والضغط على مفتاح Enter ، يمكن استخراج عدد من الأحرف التي تبدأ من الأول ، من المخزن المؤقت للدفق السينمائي. يمكن استخدام الكود التالي:

شارص[10]؛
كلفة << 'أدخل نصآ:' <<endl؛
شرك.احصل على(شارع10)؛
كلفة <<ص<<endl؛

إذا كان الإدخال هو 'أشخاص رائعون' ، فسيكون الإخراج 'رائع peo' ، من 9 أحرف وليس 10. يأخذ حرف NUL ( 0) المركز العاشر في وسيطة get. لذلك ، للحصول على 9 أحرف في str ، يجب أن يكون حجم تخزينها 10 على الأقل ، ويجب أن تكون الوسيطة get () 11. إذا كان سطر الإدخال بأكمله مطلوبًا ، فيجب أن يكون رقم تخزين السلسلة هو الرقم على الأقل عدد الأحرف المكتوبة بالإضافة إلى 1. لذلك ، إذا تمت كتابة 12 حرفًا للسطر بأكمله ، فيجب أن يكون الرقم 13 بالنسبة لحجم تخزين السلسلة (str) و 13 للوسيطة get (). لاحظ أنه يتم احتساب مسافة واحدة على أنها حرف واحد.

get (char_type * s، streamsize n، char_type delim)
من الممكن استخراج سلسلة فرعية ، محددة على اليمين ، من خلال التواجد الأول لحرف معين ، أو بحجم تدفق السلسلة الفرعية ، والذي يأتي أولاً. إذا كان نص الإدخال إلى الكود التالي رائعًا ، فسيتم استخراج رائع:

شارص[30]؛
كلفة << 'أدخل نصآ:' <<endl؛
شرك.احصل على(شارع6و'أو')؛
كلفة <<ص<<endl؛

الموضع السادس من البداية هو حرف المسافة ، وهو يحدد السلسلة الفرعية المستخرجة حصريًا. المركز السادس يأتي أولاً قبل الحرف الوحيد ، 'o'. لاحظ أن حجم التخزين لـ str يمكن أن يكون مرتفعًا قدر الإمكان.

إذا كان نص الإدخال إلى الكود التالي أشخاصًا رائعين ، فسيتم استخراج gr:

شارص[30]؛
كلفة << 'أدخل نصآ:' <<endl؛
شرك.احصل على(شارع10و'و')؛
كلفة <<ص<<endl؛

أول ظهور لـ 'e' يأتي أولاً قبل الموضع العاشر.

الحصول على كل أحرف الخط

بعد الضغط على مفتاح Enter ، يمكن الحصول على جميع الأحرف المكتوبة في السطر كما هو موضح في الكود التالي:

كلفة << 'أدخل نصآ:' <<endl؛
في حين (1) {
شارالفصل= (شار)شرك.احصل على()؛
كلفة <<الفصل؛
لو (الفصل== 'ن')
استراحة؛
}

التحويل باستخدام (char) ، يحول كل رقم عشري إلى حرف ASCII المقابل.

نظرة خاطفة ()

وظائف العضو get () لا تقرأ فقط الحرف التالي ؛ يقومون بإزالته من تيار المخزن المؤقت. ومع ذلك ، فإن وظيفة العضو peek () بسيطة تقرأ الحرف التالي (بدءًا من الأول) دون إزالته من المخزن المؤقت. في الكود التالي ، تتم قراءة كل حرف أولاً باستخدام وظيفة peek () قبل إزالته ، بواسطة وظيفة get (). كل ما يحدث بعد أن يضغط المستخدم على مفتاح Enter:

كلفة << 'أدخل نصآ:' <<endl؛
في حين (1) {
شارالفصل= (شار)شرك.نظرة خاطفة()؛
كلفة <<الفصل؛
شرك.احصل على()؛
لو (الفصل== 'ن')
استراحة؛
}

إذا لم تتم إزالة الأحرف التالية عن طريق get () ، فستقوم peek () بقراءة الحرف الأول فقط ، وستتكرر الحلقة إلى أجل غير مسمى.

عرض وحذف الأحرف قبل الضغط على Enter

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

إرسال الأحرف والسلاسل إلى الشاشة

كائن cout هو كائن دفق إخراج ، تم إنشاء مثيل له بالفعل وموجود في مكتبة C ++ القياسية. cout هو الكائن الرئيسي المستخدم في إرسال الأحرف والسلاسل إلى الشاشة. يتم ذلك باستخدام عامل الإدخال ،<< . With the cin object, the text is obtained line-by-line. With the cout object, the text is added onto the same line until ‘ ’ or endl is encountered.

يمكن أن تكون التعبيرات التي تؤدي إلى الحجميات وسيطات لمشغل الإدراج. عامل التشغيل يحول الحجم إلى نص ويضع النص في دفق كائن cout. عندما يتم إرسال النص إلى كائن cout ، فإنه يظهر عادة على الشاشة (الشاشة). ومع ذلك ، في بعض الأحيان ، قد لا تظهر على الفور. لفرض النص على الشاشة ، أدخل القيمة الخاصة ، endl ، بعد إدخال النص مباشرةً. سيؤدي هذا إلى مسح النص على الشاشة ، وستتم إضافة سطر جديد. ملاحظة: ' n' يضيف ببساطة سطرًا جديدًا ولكنه لا يقوم بدفق النص على الشاشة.

يوضح البرنامج التالي كيفية طباعة قيم int ، و float ، والنص العادي ، على الشاشة:

#يشمل
استخدام مساحة الاسمساعات؛

intالأساسية()
{
intهو - هي= 5؛
تطفوقدم= 63.5؛
كلفة << 'ال ' <<هو - هي<< 'تكلفة العناصر $' <<قدم<< ' نحن.' <<endl؛

إرجاع 0؛
}

الخرج هو:

ال5تكلفة العناصر $63.5نحن.

يوضح البرنامج التالي كيف تتم طباعة سلسلة كائن تم إنشاء مثيل له من فئة:

#يشمل
استخدام مساحة الاسمساعات؛

هيكلشارع{
شارص[أحد عشر] = 'بعض الكلمات'؛
}الهدف؛

intالأساسية()
{
كلفة <<الهدف.ص << 'ن'؛

إرجاع 0؛
}

الناتج هو 'بعض الكلمات'.

الحجج الخاصة ببرنامج C ++

يبدأ تنفيذ البرنامج من الوظيفة الرئيسية (). الدالة main () لها بالفعل معلمتان اختياريتان. صيغة الدالة main () مع المعلمات الاختيارية هي:

intالأساسية(intأرجكشار *أرجف[أرجك])
{

إرجاع 0؛
}

افترض أن اسم ملف C ++ القابل للتنفيذ هو temp. افترض أن الحجج التي يحتاجها البرنامج من بيئته (نظام التشغيل) ، التي يكتبها المستخدم ، هي ،

مقالات3قلم كتاب'منزل كبير'

هناك 5 حجج هنا: مقالات ، 3 ، كتاب ، قلم ، ومنزل كبير

كل نص. النص هو الوسيطة المرقمة لبرنامج ما. بمعنى آخر ، كل وسيطة هي سلسلة. منزل كبير في الاقتباسات لأنها عبارة. سيكون الأمر الطرفي لتشغيل هذا البرنامج:

./مقالات مؤقتة3قلم كتاب'منزل كبير'

بافتراض أن الملف المؤقت موجود في الدليل الرئيسي. لاحظ أن المسافات وليس الفواصل تفصل بين الوسيطات.

الآن ، في صيغة الدالة main () ، argc هو عدد الوسائط للبرنامج ، زائد 1. في هذه الحالة ، هناك 5 وسيطات للبرنامج. إذن ، argc هو 6. في الصيغة ، argv [argc] عبارة عن مصفوفة من مؤشرات السلاسل. يتم إعطاء القيمة الأولى لهذه المصفوفة في argv [0] بواسطة المترجم. إنه مؤشر إلى اسم ملف البرنامج. باقي القيم هي مؤشرات إلى وسيطات البرنامج بترتيب المستخدم الذي كتبته. حجم هذه المصفوفة هو argc. في هذه الحالة الحجم هو 1 + 5 = 6.

افترض أنه عند التحويل البرمجي ، تم تسمية البرنامج التالي مؤقتًا:

#يشمل
استخدام مساحة الاسمساعات؛

intالأساسية(intأرجكشار**أرجف)
{

كلفة <<أرجف[0] << '،' <<أرجف[1] << '،' <<أرجف[2] << '،' <<أرجف[3] << '،' <<أرجف[4] << '،' <<أرجف[5] <<endl؛

إرجاع 0؛
}

لاحظ هنا أنه تم التصريح عن المصفوفة 'char * argv [argc]' على أنها 'char ** argv'.

إذا تم تشغيل هذا البرنامج باستخدام الأمر الطرفي ،

./مقالات مؤقتة3قلم كتاب'منزل كبير'

ثم سيكون الناتج:

./مؤقت ، مقالات ،3، كتاب ، قلم ، منزل كبير

لاحظ أنه تم تضمين مسار الدليل مع اسم الملف القابل للتنفيذ.

لاحظ أيضًا أنه أثناء تشغيل البرنامج (استدعاء البرنامج) ، لم يتم إرسال قيمة argc.

استنتاج

تحتوي فئة iostream على أربعة أشياء مهمة هي cout و cin و cerr و clog. cin كائن إدخال ، بينما الباقي عبارة عن كائنات ناتجة. أثناء تشغيل البرنامج ، يختلف الإدخال إلى البرنامج عن وقت بدء تشغيل البرنامج. عند بدء تشغيل البرنامج ، يتم ربط الإدخال إلى البرنامج بالأمر لتشغيل البرنامج ، مفصولة بمسافات.