C++ الإدخال/الإخراج الأساسي: مثال Cout وCin وCerr

⚡ ملخص ذكي

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

  • 🔘 تيارات: تنتقل مهام الإدخال والإخراج على شكل تسلسلات بايت تسمى التدفقات، حيث تنقل البيانات بين الذاكرة الرئيسية والأجهزة.
  • 📥 ملفات الرأس: تحدد مكتبات iostream و iomanip و fstream الكائنات والمُعالجات المستخدمة للإدخال والإخراج الأساسيين.
  • 🖨️ cout and cin: يطبع الكائن cout باستخدام عامل الإدخال، بينما يقرأ الكائن cin القيم باستخدام عامل الإدخال.tracعامل التشغيل.
  • ⚠️ cerr and clog: كلاهما يُبلغ عن الأخطاء، لكن cerr يبقى غير مُخزن مؤقتًا للعرض الفوري بينما يقوم clog بتخزين الرسائل مؤقتًا أولاً.
  • 🛠️ معالجة الأخطاء: تقوم عمليات التحقق الجيدة والسيئة والفشل ونهاية الملف بقراءة حالة التدفق، لذلك يتم التقاط العمليات الفاشلة بأمان.
  • 🤖 مساعدة الذكاء الاصطناعي: تقوم برامج مساعدة البرمجة بالذكاء الاصطناعي مثل GitHub Copilot بإنشاء نماذج cin و cout من تعليق قصير أو اسم دالة.

C++ المدخلات والمخرجات الأساسية

ما هي التدفقات في C++?

C++ يوفر للمستخدمين عددًا من المكتبات التي يمكنهم استخدامها لأداء مهام الإدخال/الإخراج. يتم تنفيذ هذه المهام في شكل تسلسلات بايت، تسمى بشكل شائع التدفقات.

وتنقسم الأنهار إلى قسمين:

أنواع التدفقات

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

كيف تعمل التدفقات؟

C++ تعمل التدفقات على النحو التالي:

  1. أولاً، تتم تهيئة الدفق بالنوع الصحيح.
  2. بعد ذلك، يجب عليك تحديد مكان حدوث عمليات الإدخال/الإخراج باستخدام مؤشرات get/put.
  3. بعد الوصول إلى الموقع الصحيح في مجرى ما، يمكنك تنفيذ مهام الإدخال والإخراج باستخدام مشغلي >> و<< على التوالي.

جدول الوظائف

فيما يلي الوظائف المقدمة في ملف رأس stream.h:

الفئه وظائف
Filebufيقوم بتعيين مخازن الملفات للقراءة والكتابة. يحتوي على دالتين close() وopen()
com.fstreambaseإنها الفئة الأساسية للفئات ifstream وfstream وofstream. عملياتها مشتركة مع تدفقات الملفات.
إفستريمإنها فئة تدفق ملف الإدخال لتوفير عمليات الإدخال.
اوفستريمإنها فئة تدفق ملف الإخراج لتوفير عمليات الإخراج.
com.fstreamإنها فئة تدفق إدخال/إخراج. وهي تدعم عمليات الإدخال/الإخراج المتزامنة.

C++ ملفات الرأس للإدخال/الإخراج

C++ يوفر ثلاث مكتبات تأتي مع وظائف لأداء مهام الإدخال والإخراج الأساسية. وهي تشمل:

  • يوستريم: إنه اختصار لتدفق الإدخال/الإخراج القياسي. يأتي ملف الرأس هذا مزودًا بتعريفات لكائنات مثل cin/ cout/cerr.
  • يومانية: إنه اختصار لمتلاعبي الإدخال والإخراج. تأتي المكتبة بوظائف يمكن استخدامها لمعالجة التدفقات. أنه يحتوي على تعريفات لكائنات مثل setw، setprecision، وغيرها.
  • تيار: هذا ملف رأس لوصف دفق الملف. فهو يتعامل مع البيانات التي تتم قراءتها من الملف كمدخلات أو التي يتم كتابتها إلى ملف، كمخرجات.

تحظى الكلمات الرئيسية cin وcout بشعبية كبيرة في C++. يتم استخدامها لأخذ المدخلات وطباعة المخرجات، على التوالي. لاستخدامها، يجب عليك تضمين ملف رأس iostream في برنامجك. والسبب هو أنه تم تعريفها في ملف الرأس هذا. سيؤدي الفشل في تضمين ملف رأس iostream إلى حدوث خطأ. وهذا نتيجة لفشل من قبل C++ مترجم لفهم معنى الكلمات الرئيسية.

الكائنات الرئيسية المحددة في ملف رأس iostream هي cin وcout وcerr وclog. دعونا نناقشها.

الأمراض المنقولة جنسيا :: كوت

كائن cout هو مثيل لفئة iostream. يتم استخدامه لإنتاج الإخراج على جهاز إخراج قياسي، والذي يكون عادةً الشاشة. يتم استخدامه مع عامل إدراج الدفق (<<).

مثال

#include <iostream>
using namespace std;
int main() {

	char welcome[] = "Welcome to Guru99";

	cout << welcome << endl;

	return 0;
}

الإخراج:

الأمراض المنقولة جنسيا :: كوت

فيما يلي لقطة شاشة للكود:

الأمراض المنقولة جنسيا :: كوت

Code التفسير:

  1. قم بتضمين ملف رأس iostream حيث يتم تعريف كائن cout.
  2. قم بتضمين مساحة الاسم std حتى لا نضطر إلى استدعائها عند استخدام فئاتها.
  3. استدعاء الدالة الرئيسية (). يجب إضافة رمز البرنامج داخل نصه. القوس المتعرج الافتتاحي {يشير إلى بداية جسمه.
  4. أنشئ متغيرًا نصيًا باسم welcome لتخزين السلسلة Welcome to Guru99.
  5. اطبع قيمة السلسلة الترحيبية على وحدة التحكم. النهاية هي أ C++ الكلمة الأساسية تعني خط النهاية. يقوم بتحريك المؤشر لبدء طباعة النص في السطر التالي.
  6. يجب أن يقوم البرنامج بإرجاع القيمة عند التنفيذ الناجح.
  7. نهاية نص الوظيفة الرئيسية ().

الأمراض المنقولة جنسيا::سين

الكائن cin هو نسخة من فئة istream. يقرأ المدخلات من جهاز الإدخال، وهو لوحة المفاتيح. ويُستخدم عادةً مع extracعامل التشغيل (>>). مثالtracالكائن tion مسؤول عن extracإدخال البيانات عبر لوحة المفاتيح من كائن cin.

مثال

يوضح المثال التالي كيفية استخدام الكلمة الأساسية cin في C++:

#include <iostream>
using namespace std;
int main()
{
	int number;

	cout << "Enter a number:";
	cin >> number;
	cout << "\nYou entered: " << number;

	return 0;
}

الإخراج:

الأمراض المنقولة جنسيا::سين

فيما يلي لقطة شاشة للكود:

الأمراض المنقولة جنسيا::سين

Code التفسير:

  1. قم بتضمين ملف رأس iostream في برنامجنا. يتم تعريف كائن cin في ملف الرأس هذا.
  2. قم بتضمين مساحة الاسم std لاستخدام فئاتها. لن تضطر إلى الاتصال بـ std عند استخدام فئاته.
  3. استدعاء الدالة الرئيسية (). يجب إضافة رمز البرنامج داخل نصه.
  4. بداية جسم البرنامج.
  5. نعلن متغير صحيح رقم مسمى.
  6. اطبع رسالة على الشاشة تطالب المستخدم بإدخال رقم.
  7. اقرأ القيمة التي أدخلها المستخدم على وحدة التحكم من لوحة المفاتيح.
  8. اطبع القيمة المقروءة أعلاه على وحدة التحكم بجانب النص الآخر.
  9. يجب أن يُرجع البرنامج قيمة إذا تم تنفيذه بنجاح.
  10. نهاية جسم الوظيفة الرئيسية.

الأمراض المنقولة جنسيا::cerr

يشكل كائن cerr دفق الخطأ القياسي لإخراج الأخطاء C++. Cerr هو مثيل لفئة ostream. كائن cerr غير مخزن مؤقتًا. وهذا يعني أنه يُستخدم عند عرض رسالة خطأ على الفور.

نظرًا لأنه غير مخزن مؤقتًا، فإنه لا يخزن رسالة الخطأ لعرضها لاحقًا. يتم استخدامه مع عامل إدراج التدفق (<<).

مثال

#include <iostream>
using namespace std;
int main() {

	cerr << "An Error occurred!";

	return 0;
}

الإخراج:

الأمراض المنقولة جنسيا::cerr

فيما يلي لقطة شاشة للكود:

الأمراض المنقولة جنسيا::cerr

Code التفسير:

  1. قم بتضمين ملف رأس iostream حيث تم تعريف كائن cerr.
  2. قم بتضمين مساحة الاسم std حتى لا نضطر إلى استدعائها عند استخدام فئاتها.
  3. استدعاء الدالة الرئيسية (). يجب إضافة منطق البرنامج داخل جسمه. يمثل القوس المتعرج الافتتاحي بداية نص الوظيفة.
  4. استخدم كائن cerr لطباعة خطأ على وحدة التحكم.
  5. يجب أن يقوم البرنامج بإرجاع قيمة عند التنفيذ الناجح.
  6. نهاية جسم الوظيفة الرئيسية.

الأمراض المنقولة جنسيا::تسد

كائن clog هو مثيل لفئة ostream. يتم استخدامه لإظهار الأخطاء على الشاشة القياسية، وهي الشاشة. إنه مشابه لكائن cerr، ولكنه مخزن مؤقتًا. نظرًا لأنه مخزن مؤقتًا، فإنه يخزن رسالة الخطأ في المخزن المؤقت حتى يتم ملء المخزن المؤقت/تفريغه. يتم استخدامه مع عامل إدراج الدفق (<<).

مثال

#include <iostream>
using namespace std;
int main() {
	clog << "An Error occurred!";
	return 0;
}

الإخراج:

الأمراض المنقولة جنسيا::تسد

فيما يلي لقطة شاشة للكود:

الأمراض المنقولة جنسيا::تسد

Code التفسير:

  1. بما في ذلك ملف رأس iostream الذي تم فيه تعريف كائن الانسداد.
  2. بما في ذلك مساحة الاسم std حتى نتمكن من استخدام فئاتها دون استدعائها.
  3. استدعاء الدالة الرئيسية (). يجب إضافة منطق البرنامج داخل جسمه. يمثل { بداية نص الوظيفة.
  4. استخدم كائن الانسداد لطباعة خطأ على الإخراج القياسي، الشاشة.
  5. يجب أن يقوم البرنامج بإرجاع قيمة عند اكتماله بنجاح.
  6. نهاية نص الدالة الرئيسية ().

معالجة الأخطاء مع تدفقات الإدخال والإخراج

كما تقوم كائنات التدفق نفسها بالإبلاغ عما إذا كانت العملية قد نجحت، وهو ما تكشفه عمليات التحقق من حالة التدفق.

للتحقق مما إذا كان الدفق صالحًا أم لا، يمكنك استخدامه كقيمة منطقية.

هنا مثال:

ifstream file( "myfile.txt" );
if ( ! file )
{
        cout << "File NOT opened!" << endl;
}

للحصول على مزيد من التفاصيل حول حالة البث، يمكنك استخدام هذه الوظائف:

  • good()- سيعود صحيحًا إذا كان كل شيء على ما يرام.
  • bad()- سيعود صحيحًا في حالة حدوث خطأ فادح.
  • fail()- سوف يعود true بعد عملية تدفق غير ناجحة.
  • eof()- سيعود صحيحًا إذا وصل إلى نهاية الملف.

لمعرفة ما إذا كانت عملية القراءة/الكتابة معينة قد فشلت، اختبر نتيجة القراءة.

على سبيل المثال، للتحقق مما إذا كان المستخدم قد أدخل عددًا صحيحًا صالحًا، قم بما يلي:

int p;
if ( cin >> p ) 
{
        cout << "Enter valid number" << endl;
}

الأسئلة الشائعة

كائن cout آمن من حيث النوع ويستخدم عامل الإدخال، لذا فهو يكتشف نوع كل قيمة تلقائيًا. أما دالة printf في لغة C فتعتمد على مُحدِّدات التنسيق مثل %d التي يجب أن تُطابق الوسائط يدويًا.

السابقtracيتوقف عامل التشغيل عند أول مسافة، لذا يقرأ cin كلمة واحدة فقط. لالتقاط سطر كامل مع المسافات، استدعِ الدالة getline(cin, variable)، التي تقرأ حتى حرف السطر الجديد.

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

توجد الكائنات cin و cout و cerr و clog في نطاق الاسم std. يتيح لك استخدام `using namespace std` كتابة `cout` بدلاً من `std::cout`. غالبًا ما تحتفظ المشاريع الكبيرة بالبادئة `std` الصريحة لتجنب التعارضات.

قم بتضمين ملف رأس iomanip واستخدم أدوات المعالجة مع cout. تقوم أداة المعالجة setw بحجز عرض الحقل، بينما تحدد setprecision عدد الأرقام الظاهرة، مع تنسيق الأرقام والأعمدة دون تغيير القيم المخزنة.

نعم. بما أن cout و cerr عبارة عن تدفقات منفصلة، ​​يمكن للصدفة إعادة توجيه المخرجات العادية إلى ملف بينما تصل الأخطاء إلى الشاشة. في البرمجة، يمكن لـ rdbuf توجيه تدفق إلى مخزن مؤقت آخر.

نعم. تقوم برامج المساعدة البرمجية المدعومة بالذكاء الاصطناعي بقراءة تعليق أو اسم دالة وإنتاج عبارات cin و cout، بالإضافة إلى تضمين iostream وموجه منسق. Revيُعدّ الاطلاع على منطق التدفق المُولّد للحالات الشاذة أمراً حكيماً.

نعم. مساعد الطيار جيثب يُكمل تنسيق cout، وحلقات التحقق من صحة cin، وفحوصات أخطاء cerr أثناء الكتابة. إنه عام 2026 C++ تضيف تقنية ذكاء الكود وعيًا بالرموز الدلالية، بحيث تظل اقتراحات الملفات المتعددة متسقة.

تلخيص هذه التدوينة بـ: