تستخدم عملية الإدخال/الإخراج في C++ مفهوم الدفق. يشار إلى سلسلة البايتات أو تدفق البيانات على أنها دفق. إنه يسرع الأداء.
إذا تم نقل البايتات من الذاكرة الرئيسية إلى جهاز مثل الطابعة أو شاشة العرض أو اتصال الشبكة وما إلى ذلك، فإن هذا يسمى عملية الإخراج.
تحدث عملية الإدخال عندما تتدفق وحدات البايت من جهاز مثل الطابعة أو شاشة العرض أو اتصال الشبكة إلى الذاكرة الرئيسية.
في لغة سي++، وظائف محددة مسبقا ويتم توفير الإعلانات من خلال ملفات الرأس، مما يسمح لك بالقيام بمهام محددة دون الحاجة إلى كتابة تعليمات برمجية جديدة من البداية. تتضمن بعض ملفات الرأس المهمة لعمليات الإدخال/الإخراج في لغة C++ وظائف لتنفيذ مهام الإدخال والإخراج بشكل فعال. تحتوي مكتبة C++ القياسية، وهي مجموعة من الفئات والأساليب التي تم إنشاؤها بلغة برمجة C++، على ملفات الرأس هذه. دعونا نناقش ملفات الرأس الرئيسية لعمليات الإدخال/الإخراج:
الملف الاساسي | الوظيفة والوصف |
---|---|
يتم استخدامه لتحديد كوت، سين وسير الكائنات، التي تتوافق مع دفق الإخراج القياسي، ودفق الإدخال القياسي، ودفق الخطأ القياسي، على التوالي. | |
يتم استخدامه للإعلان عن الخدمات المفيدة لتنفيذ عمليات الإدخال/الإخراج المنسقة، مثل ضبط الدقة والضبط. | |
يتم استخدامه للإعلان عن الخدمات لمعالجة الملفات التي يتحكم فيها المستخدم. |
يو ستريم: إنه أحد أهم ملفات الرأس لعمليات الإدخال والإخراج في لغة C++. انها تقف ل 'المدخلات والمخرجات' تدفق. للعمل مع أشكال مختلفة من تدفقات الإدخال/الإخراج، com.iostream يتضمن ملف الرأس الفئات إيستريم (دفق الإدخال) و أوستريم (تيار الإخراج) وكذلك الفئات المشتقة منه ifstream، ofstream ، و com.stringstream . الفئات الأكثر استخدامًا في ملف الرأس هذا هي سين (الإدخال القياسي) و cout (الإخراج القياسي) ، والتي تسمح لك بقراءة مدخلات المستخدم وعرض المخرجات على وحدة التحكم. على سبيل المثال:
#include using namespace std; int main() { int num; cout <> num; cout << 'You entered: ' << num << endl; return 0; }
انتاج |
Enter a number: 42 You entered: 42
iomanip: يرمز ملف الرأس هذا إلى 'التلاعب بالمدخلات والمخرجات' . ويوفر أدوات للتنسيق مدخل و انتاج . يسمح لك بتعديل المحاذاة والعرض والدقة وميزات التنسيق الأخرى للإدخال والإخراج. ضبط، ضبط الدقة، ثابت، يسار، يمين ، وغيرها من الوظائف المستخدمة بانتظام مدرجة أدناه. إنه مفيد بشكل خاص لتقديم البيانات بطريقة معينة.
مثال:
#include #include using namespace std; int main() { double pi = 3.14159; cout << fixed << setprecision(2) << 'Value of pi: ' << pi << endl; return 0; }
انتاج |
نمط تصميم البناء
Value of pi: 3.14
تدفق: يتم استدعاء ملف الرأس لعمليات إدخال / إخراج الملف com.fstream . وهو يشتمل على دروس للقراءة من الملفات والكتابة إليها ifstream (دفق ملف الإدخال) و ofstream (دفق ملف الإخراج) . يستخدم النظام هذه الفئات لفتح ملفات للقراءة فقط والكتابة فقط.
مثال:
#include #include using namespace std; int main() { ofstream outputFile('output.txt'); if (outputFile.is_open()) { outputFile << 'Hello, File I/O!'; outputFile.close(); cout << 'File is written successfully.' << endl; } else { cout << 'Failed to open the file.' << endl; } return 0; }
انتاج |
The file was written successfully.
تعد ملفات الرأس هذه من بين الملفات الأكثر أهمية لمهام الإدخال/الإخراج في C++. كل واحدة لها غرض محدد وتوفر الأدوات اللازمة لإدارة المهام التي تتضمن المدخلات والمخرجات بنجاح، سواء كانت تتفاعل مع وحدة التحكم، إخراج التنسيق أو العمل مع الملفات.
في C++، نستخدمها بشكل متكرر 'استخدام اسم للمحطة؛' بعد ملفات الرأس. ال مساحة الاسم القياسية؛ يتم استخدام العبارة بشكل متكرر في C++ لتبسيط التعليمات البرمجية عند العمل مع مكونات المكتبة القياسية. دعونا نتفحص وظيفة هذا البيان وتطبيقه بمزيد من التفصيل:
أ مساحة الاسم هي تقنية لتجميع معرفات مماثلة (مثل الطبقات والوظائف ، و المتغيرات ) لمنع تعارض الأسماء. توفر مكتبة C++ القياسية أجزائها (مثل cin وcout وما إلى ذلك) ضمن مساحة الاسم std.
على المدى 'معيار' يتم اختصاره إلى 'الأمراض المنقولة جنسيا' ، وجميع عناصر المكتبة القياسية موجودة بداخلها. من خلال القيام بذلك، يتم تقليل تعارضات الأسماء مع المعرفات التي تم إعدادها في التعليمات البرمجية الخاصة بك.
الآن دعونا نتحدث عن سبب استخدام مساحة الاسم std؛ يستخدم البيان:
بدون استخدام مساحة الاسم std:
#include int main() { std::cout << 'Hello, world!' << std::endl; return 0; } With using namespace std: #include using namespace std; int main() { cout << 'Hello, world!' << endl; return 0; }
كما ترون، وذلك باستخدام مساحة الاسم القياسية؛ بيان يسمح لك بحذف الأمراض المنقولة جنسيا:: بادئة عند الوصول إلى مكونات المكتبة القياسية. فهو يجعل التعليمات البرمجية الخاصة بك أقصر وأكثر قابلية للقراءة، حيث لا يتعين عليك التكرار الأمراض المنقولة جنسيا:: قبل كل معرف مكتبة قياسي.
ملفات رأس مكتبة الإدخال/الإخراج
تيار الإخراج القياسي (cout):
كائن cout هو كائن محدد مسبقًا من فئة ostream. وهو متصل بجهاز الإخراج القياسي، والذي عادة ما يكون شاشة عرض. يتم استخدام cout مع عامل تشغيل الدفق (<<) to show the output on a console< p>
دعونا نرى المثال البسيط لتيار الإخراج القياسي (cout):
#include using namespace std; int main( ) { char ary[] = 'Welcome to C++ tutorial'; cout << 'Value of ary is: ' << ary << endl; }
انتاج |
Value of ary is: Welcome to C++ tutorial
تيار الإدخال القياسي (سين)
ال يتناول الطعام هو كائن محدد مسبقًا لـ تدفق فصل. وهو متصل بجهاز الإدخال القياسي، والذي عادة ما يكون لوحة مفاتيح. يتم استخدام cin جنبًا إلى جنب مع مشغل استخراج الدفق (>>) لقراءة الإدخال من وحدة التحكم.
دعونا نرى المثال البسيط لتيار الإدخال القياسي (cin):
#include using namespace std; int main( ) { int age; cout <> age; cout << 'Your age is: ' << age << endl; }
انتاج |
Enter your age: 22 Your age is: 22
خط النهاية القياسي (endl)
ال endl هو كائن محدد مسبقًا لـ عدونا فصل. يتم استخدامه لإدراج أحرف سطر جديد ومسح الدفق.
دعونا نرى المثال البسيط لخط النهاية القياسي (endl):
#include using namespace std; int main( ) { cout << 'C++ Tutorial'; cout << ' Javatpoint'<<endl; cout << 'end of line'<<endl; } < pre> <p> <strong>Output</strong> </p> <pre> C++ Tutorial Javatpoint End of line </pre> <h3>Un-buffered standard error stream (cerr):</h3> <p> <strong> <em>cerr</em> </strong> stands for <strong> <em>'standard error'</em> .</strong> </p> <p>It is an unbuffered stream, meaning that output sent to <strong> <em>cerr</em> </strong> is immediately displayed on the console without buffering.</p> <p>It is typically used for displaying error messages and diagnostic information, which need to be displayed immediately to avoid delays caused by buffering.</p> <p> <strong>Example: using cerr:</strong> </p> <pre> #include int main() { std::cerr << 'This is an error message.' << std::endl; return 0; } </pre> <p> <strong>Output</strong> </p> <pre> This is an error message. </pre> <h3>buffered standard error stream (clog):</h3> <p>clog stands for <strong> <em>'standard log'</em> </strong> . It is a buffered stream, similar to cout. It's often used for writing informational or diagnostic messages that are less time-sensitive than errors. The use of buffering can improve performance when displaying a large number of messages.</p> <p> <strong>Example: using clog</strong> </p> <pre> #include int main() { std::clog << 'This is an informational message.' << std::endl; return 0; } </pre> <p> <strong>Output</strong> </p> <pre> This is an informational message. </pre> <p>In both examples, the output will appear on the console. However, the main difference between <strong> <em>cerr</em> </strong> and <strong> <em>clog</em> </strong> lies in their buffering behavior. Due to its unbuffered nature, messages given to <strong> <em>cerr</em> </strong> are displayed right away, but messages sent to clog may be buffered for greater speed. However, they will still eventually appear on the console.</p> <h4>Note: It is important to remember that the type of message you wish to display will determine whether you use cerr or clog. Use cerr for essential messages that need immediate attention (like error messages) and use clog for less critical diagnostic or informational messages that can be buffered for better performance.</h4> <hr></endl;>
دفق الأخطاء القياسية غير المخزنة (cerr):
cerr تمثل 'خطأ تقليدي' .
وهو عبارة عن دفق غير مخزن، مما يعني أن الإخراج يتم إرساله إلى cerr يتم عرضه على الفور على وحدة التحكم دون التخزين المؤقت.
يتم استخدامه عادةً لعرض رسائل الخطأ والمعلومات التشخيصية، والتي يجب عرضها فورًا لتجنب التأخير الناتج عن التخزين المؤقت.
مثال: استخدام cerr:
#include int main() { std::cerr << 'This is an error message.' << std::endl; return 0; }
انتاج |
This is an error message.
دفق الخطأ القياسي المخزن مؤقتًا (الانسداد):
تسد لتقف على 'السجل القياسي' . إنه تيار مخزن، مشابه لـ cout. يتم استخدامه غالبًا لكتابة رسائل إعلامية أو تشخيصية تكون أقل حساسية للوقت من الأخطاء. يمكن أن يؤدي استخدام التخزين المؤقت إلى تحسين الأداء عند عرض عدد كبير من الرسائل.
مثال: استخدام السدادة
#include int main() { std::clog << 'This is an informational message.' << std::endl; return 0; }
انتاج |
This is an informational message.
في كلا المثالين، سوف يظهر الإخراج على وحدة التحكم. ومع ذلك، فإن الفرق الرئيسي بين cerr و تسد يكمن في سلوكهم التخزين المؤقت. نظرًا لطبيعتها غير المخزنة مؤقتًا، يتم إرسال الرسائل إلى cerr يتم عرضها على الفور، ولكن قد يتم تخزين الرسائل المرسلة إلى Clog مؤقتًا لزيادة السرعة. ومع ذلك، فإنها ستظل تظهر في النهاية على وحدة التحكم.
ملاحظة: من المهم أن تتذكر أن نوع الرسالة التي ترغب في عرضها سيحدد ما إذا كنت تستخدم cerr أو clog. استخدم cerr للرسائل الأساسية التي تحتاج إلى اهتمام فوري (مثل رسائل الخطأ) واستخدم clog للرسائل التشخيصية أو المعلوماتية الأقل أهمية والتي يمكن تخزينها مؤقتًا للحصول على أداء أفضل.
)>