freeCodeCamp/guide/arabic/cplusplus/input-and-output/index.md

8.8 KiB

title localeTitle
Input and Output المدخلات والمخرجات

المدخلات والمخرجات مع تيارات

لطباعة الأشياء إلى وحدة التحكم ، أو القراءة منها ، يمكنك استخدام cout و cin ، اللذان يطلق عليهما streams . يتم استخدام هذه الاستعارة نظرًا لأنك تستخدم تدفقات مثل استخدامك لحوض أو نقرة: إما أن تقوم بإسقاط البيانات إلى حوض ( cout ) أو الحصول على بيانات من صنبور ( cin ).

الإخراج مع cout

يستخدم برنامج "Hello World" cout لطباعة "Hello World!" إلى وحدة التحكم:

`#include using namespace std;

int main() { cout << "Hello world!" << endl; } `

أول سطرين في الأعلى ضروريان لاستخدام cout ومجموعات التدفقات الأخرى. #include<iostream> يجعل كائنات الدفق متاحة ، using namespace std; يتيح لك كتابة cout مباشرة بدلاً من الاضطرار إلى كتابة std::cout ، وهذا يعني أن نحتاج إلى استخدام cout من مساحة الاسم std .

cout لتقف على "وحدة التحكم الإخراج" ، وهو ما يسمى تيار الإخراج الذي يمثل وحدة التحكم. عندما تريد طباعة شيء إلى وحدة التحكم ، يمكنك وضعه في cout ؛ تخيل أنها حفرة تؤدي إلى المحطة. لوضع الأشياء في هذه الحفرة ، في وقت واحد ، يمكنك استخدام << المشغل ، ويعرف أيضا باسم مشغل الإدراج 1 . يمكن تقييد المشغل ، أي يمكنك وضع عدة أشياء في واحد تلو الآخر. سوف يطبع التالي "الكعكة هي كذبة.":

cout << "The cake " << "is " << "a " << "lie." << endl;

endl لتقف على "End Line" وهو عنصر آخر يأتي من <iostream> . عند وضع endl في cout ، ستقوم بطباعة حرف السطر الجديد ("\ n") إلى وحدة التحكم ، وكذلك مسح cout ، مما يعني أنه سيجبر cout على طباعة كل شيء قمت بوضعه فيه الآن . إذا كنت لا تضع endl إلى cout ، cout قد حفاظ على البيانات التي قد وضعت في ذلك، ولكن تنتظر المزيد من البيانات قبل طباعة كل ذلك في الواقع. هذا يسمى التخزين المؤقت وهو جيد جدًا للأداء ، ولكن إذا كنت قد قدمت بالفعل كل شيء من المفترض طباعته ، فأنت تريد أن cout على الفور. لذلك من الممارسات الجيدة أن تنتهي مع endl في الأماكن التي يكون لها معنى.

يمكن وضع كل شيء تقريبًا في جدول: السلاسل ، والأرقام ، والمتغيرات ، والتعبيرات ، وما إلى ذلك. في ما يلي بعض الأمثلة على عمليات إدراج البث الصحيحة:

// Notice we can use the number 42 and not the string "42". cout << "The meaning of life is " << 42 << endl;` // Output: The meaning of life is 42

string name = "Tim"; cout << "Except for you, " << name << endl;`// Output: Except for you, Tim

string name = "Tim"; cout << name; cout << " is a great guy!" << endl;` // Output: Tim is a great guy!

int a = 3; cout << a*2 + 18/a << endl;`// Output: 12

ملاحظة حول المسافة البيضاء

C ++ دائما يضع لكم في السيطرة، ويفعل بالضبط فقط الأشياء التي تقول أن تفعله. قد يكون هذا مفاجئًا في بعض الأحيان ، كما في المثال التالي:

string name = "Sarah"; cout << "Good morning" << name << "how are you today? << endl;

قد تتوقع أن تطبع "صباح الخير يا سارة كيف حالك اليوم؟" ، ولكن في الواقع ، سيكون الناتج "Good morningSarahhow هل أنت اليوم؟". سبب هذا الخطأ هو أنك لم تكتب مسافات في السلاسل المحيطة name ، وحيث أنك لم تحدد أي مسافات ، فإن cout لم يقم بطباعة أي منها. النسخة الصحيحة ستكون: cout << "Good morning " << name << " how are you today? << endl;

لا تحدث فواصل الأسطر من تلقاء نفسها. قد تعتقد أن هذا من شأنه أن يطبع وصفة على أربعة أسطر:

cout << "To make bread, you need:"; cout << "* One egg"; cout << "* One water"; cout << "* Two wheat";

لكن المخرج هو في الواقع على سطر واحد: "لصنع الخبز ، تحتاج: * بيضة واحدة * ماء واحد * اثنين من القمح". هذا لأنه لا توجد أحرف سطر جديد في نهاية الأسطر ، لذا بشكل طبيعي ، تفترض C ++ أننا لا نريدها أن تطبع أحرف السطر الجديد.

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

cout << "To make bread, you need:\n"; cout << "* One egg\n"; cout << "* One water\n"; cout << "* Two wheat" << endl;

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

المدخلات مع السينما

لقراءة من وحدة التحكم، يمكنك استخدام دفق الإدخال cin بالطريقة نفسها كما تفعل cout ، ولكن بدلا من وضع الأمور في cin ، وانت "إخراجهم". يقرأ البرنامج التالي رقمين من المستخدم ويضيفهما معًا:

`#include using namespace std;

int main() { int a, b; // Variables to hold the two numbers.

cout << "Please enter the first number:" << endl; cin >> a; cout << "Please enter the second number:" << endl; cin >> b;

cout << "The sum of your numbers is: " << a + b << endl; } `

يقف cin لـ "Console Input" وهو دفق إدخال يمثل الإدخال من وحدة التحكم. في التعبير cin >> a; يتم قراءة البيانات من cin وحفظها في المتغير a ، باستخدام المشغل >> ، عامل الاستخراج 2 . يقرأ عامل الاستخراج بالضبط نفس القدر المطلوب من البيانات للكتابة في المتغير الذي نحدده ، ويتخطى أي مسافة بيضاء ، لذلك إذا كان المستخدم يكتب "6" التي ستقرأ فقط كقيمة 6 .

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

يمكن ربط عامل الاستخراج << . هنا هو نفس البرنامج كما في المرة السابقة ، ولكن مكتوبة بطريقة أكثر إيجازا:

`#include using namespace std;

int main() { int a, b; // Variables to hold the two numbers.

cout << "Please enter two numbers:" << endl; cin >> a >> b; cout << "The sum of your numbers is: " << a + b << endl; } `

عند العمل بالسلاسل ، يقوم مشغل الاستخراج أولاً بقراءة البيانات من cin لملء a ، ثم قراءة البيانات لملء b .

يمكن أيضًا استخدام عبارات printf و scanf القياسية باستخدام c + عن طريق استيراد " ' الملف الاساسي.

مصادر

  1. http://www.cplusplus.com/reference/ostream/ostream/operator٪3C٪3C/
  2. http://www.cplusplus.com/reference/istream/istream/operator٪3E٪3E/