وظائف C ++ istream

Wzayf C Istream

يصف المصطلح 'تيار' في C ++ تدفق الأحرف بين مؤشر ترابط البرنامج و i / o. هناك حاجة إلى فئات دفق C ++ لإدخال وإخراج الإجراءات على أجهزة IO والملفات. تم تصميم هذه الفئات لإدارة مدخلات البرنامج ومخرجاته ولديهم وظائف خاصة.

تيار التسلسل الهرمي للفئة

تتكون فئة C ++ من الأساليب المطلوبة لإدارة البيانات التي تحتوي عليها والتحكم فيها.

float ، و double ، و classes هي أنواع بيانات مشابهة لـ int. يُشار إلى المتغير الفريد مع فئة كنوع بياناته باسم كائن C ++. الكائنات الخاصة المحددة مسبقًا 'cin' و 'cout' لها فئات مختلفة لأنواع بياناتها.



البيانات المكتوبة إلى 'cout' أو المقروءة من 'cin' هي أمثلة على تدفق البيانات إلى البرامج أو خارجها في C ++. حاليًا ، نحن ندرس الفئات الأربعة التالية لهذا الفصل:



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



أوستريم
وهو عبارة عن دفق إخراج له استخدامات عديدة. تأتي Ostreams في أشكال cout و cin.

إذا دفق
إنه دفق من ملفات الإدخال.

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



إذا الطبقة تيار
يمكن معالجة تيار if Stream بنفس طريقة istream ، وهو ما هو عليه.

من الدرجة تيار
بنفس الطريقة التي يعمل بها ifstreams ، ولكن مع الإخراج بدلاً من الإدخال ، فإن ofstream هو دفق ملف الإخراج. يتم استخدام ofstream بنفس طريقة استخدام cout بعد إنشائه وفتحه والتحقق من عدم وجود أخطاء فيه.

فئة Ios
من هذه الفئة ، نزلت جميع فئات الدفق. تدفقات الإدخال والإخراج نوعان مختلفان.

يحدد أجزاء الدفق المستقلة عن حالة الإدخال أو الإخراج للتيار في قاعدة ios.

على عكس الأعضاء الذين تمت مناقشتهم في ios base ، يتم وصف الأعضاء الذين يعتمدون على معلمات القالب في هذا الجزء.

تيار (إدخال)
نظرًا لتعقيد مكتبة iostream ، لن نتمكن من تغطيتها بالكامل في هذه الدروس. ومع ذلك ، سنبرز الوظائف الأكثر استخدامًا. في هذا القسم ، سنلقي نظرة على فئة الإدخال من مجموعة متنوعة من الزوايا (istream).

لقد تعلمنا أنه سيتم استخدام عامل الاستخراج (>>) للحصول على البيانات من تدفق الإدخال.

مجرى

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

فئات الأعضاء

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

المهام

istream :: gcount
يعطي عدد الأحرف الذي تم الحصول عليه من أحدث إجراء إدخال غير منسق للكائن. تقوم إجراءات الإدخال غير المنسقة - get، getline، ignore، peek، read، read some، putback، and unget - بتغيير القيمة التي تُرجعها هذه الوظيفة. ومع ذلك ، ضع في اعتبارك أن استدعاء النظرات الخاطفة أو التراجع أو إلغاء الحصة لا يؤدي إلى استخراج أي أحرف. نتيجة لذلك ، سيعود العد دائمًا 0.

istream :: الحصول على
يأخذ الحرف المنفرد حرفًا واحدًا من الدفق. يتم تعيين الحرف كقيمة الوسيطة أو يتم إرجاعه (التوقيع الأول) (التوقيع الثاني).

سلسلة C: في حالة وجود حرف الفاصل ، لا يتم إزالته من تسلسل الإدخال بدلاً من الاحتفاظ به كالحرف التالي ليتم استرجاعه من التدفق إذا كان موجودًا.

istream :: getline
يزيل الأحرف من الدفق كمدخلات غير منسقة ويحفظها كسلسلة c في المتغير 's' حتى يصبح الحرف المستخرج حرف الفاصل أو تتم كتابة الأحرف 'n' إلى 's'. بالإضافة إلى ذلك ، ستتوقف الطريقة عن استخراج الأحرف إذا وصلت إلى نهاية الملف.

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

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

قبل الوصول إلى تسلسل الإدخال ، تنشئ الوظيفة كائنًا خفيرًا داخليًا (مع noskipws سيكون صحيحًا). أخيرًا ، يقتل كائن الحارس قبل العودة ، ويستخرج الأحرف من كائن المخزن المؤقت للدفق المرتبط به (بافتراض أن كل شيء على ما يرام) كما لو كان ينفذ إحدى طرق أعضائه: sbumpc أو sgetc.

istream :: عامل >>
عامل الاستخراج (>>) يطبق هذا العامل على تدفق الدخل. لديها عدد كبير جدًا من الأعضاء كوظيفة.

النوع الحسابي

يتم إخراج الأحرف من الدفق وتحليلها بالتتابع لتمثيل قيمة من النوع الصحيح ، والتي يتم حفظها بعد ذلك كقيمة 'val'. قبل الوصول إلى تسلسل الإدخال ، تقوم الوظيفة ببناء كائن خفير داخليًا (سيكون noskipws خاطئًا). إذا تم فحص كل شيء جيدًا ، فسيتم تشغيل num get :: get لإكمال عمليات الاستخراج والتحليل أثناء تعديل أعلام الحالة الداخلية للدفق. يتم تدمير الكائن الحارس في النهاية قبل مغادرته.

تنشئ الوظيفة كائنًا خفيرًا داخليًا قبل قراءة تسلسل الإدخال ، ويُنظر إليها على أنها تؤدي إدخال منسق. أخيرًا ، يقتل كائن الحارس قبل العودة ، ويستخرج الأحرف من كائن المخزن المؤقت للدفق المرتبط به (بافتراض أن كل شيء على ما يرام) كما لو كان ينفذ إحدى طرق أعضائه ، sbumpc أو sgetc.

المتلاعبون

يسمى pf (* this) ، حيث يمكن أن يكون pf مناورًا. المتلاعبات هي إجراءات تم إنشاؤها خصيصًا ليتم استدعاؤها عند استدعاء هذا العامل. لا يتأثر تسلسل الإدخال بهذا الإجراء ولا يتم استخراج أية أحرف.

istream :: التراجع
يحاول الحرف المستعاد تحريك المؤشر لأسفل بمقدار حرف واحد في الدفق بحيث يمكن استخراج آخر حرف تم استرداده من الدفق مرة أخرى عن طريق عمليات الإدخال.

قبل الوصول إلى تسلسل الإدخال ، تقوم الوظيفة ببناء كائن حراسة داخليًا. ثم يستدعي sputbackc (c) على كائن المخزن المؤقت للتيار المرتبط به (إذا كان جيدًا). يتم تدمير الكائن الحارس في النهاية قبل مغادرته.

istream :: قراءة
قراءة كتلة البيانات:

يتم أخذ الأحرف 'n' من التدفق ثم يتم تخزينها في المصفوفة التي يُشار إليها بالحرف 's'. تقوم هذه الوظيفة فقط بتكرار كتلة من البيانات دون فحص محتويات البيانات أو إضافة حرف فارغ في النهاية.

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

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

istream :: readsome
تعتمد هذه الوظيفة على الأعمال الداخلية لكائن المخزن المؤقت للتيار المحدد المرتبط بالدفق ، والذي يكون سلوكه محددًا إلى حد كبير بالتنفيذ للفئات القياسية.

داخل الوظيفة ، يتم إنشاء كائن الحارس أولاً قبل الوصول إلى تسلسل الإدخال. ثم (إذا نجح ذلك) ، فإنه يستدعي وظيفة العضو في فائدة كائن المخزن المؤقت للدفق لتحديد عدد الأحرف المتاحة الآن قبل استدعاء 'sbumpc' لاستخراج ما يصل إلى هذا العدد من الأحرف (أو sgetc). يتم تدمير الكائن الحارس في النهاية قبل مغادرته.

istream :: تسعى
يحدد الموضع في سطر الإدخال المكان الذي سيتم فيه سحب الحرف التالي من دفق الإدخال. قبل قراءة تسلسل الإدخال ، تقوم الوظيفة ببناء كائن خفير داخليًا. ثم (إذا كان موافقًا) ، يقوم بإجراء واحد من استدعائين لكائن المخزن المؤقت للدفق المقابل: pubseekpos (1) أو pubseekoff (2) ، (إن وجد). أخيرًا ، يمحو عنصر الحارس ويغادر.

istream :: مزامنة
محاذاة مخزن الإدخال المؤقت:

لجلب تسلسل الإدخال المتحكم به لمخزن البث المرتبط إلى المزامنة. يحدد التنفيذ المحدد لكائن المخزن المؤقت للتيار المتصل بالدفق تفاصيل العملية.

istream :: tellg
الحصول على موضع تسلسل الإدخال:

يعطي موقع الحرف الحالي في دفق الإدخال. ثم ترجع الدالة -1. إذا فشل العضو ، فإنه يعود صحيحًا.

تقوم بإرجاع rdbuf () -> pubseekoff إذا لم يكن (0، cur، in). يتم تدمير الكائن الحارس في النهاية قبل مغادرته.

istream :: unget
إزالة الحرف:

يحاول تحريك المؤشر لأسفل بمقدار حرف واحد في الدفق بحيث يمكن استخراج آخر حرف تم استرداده من الدفق مرة أخرى عن طريق عمليات الإدخال.

غير الأعضاء

عامل >> (istream)
يوفر عامل الاستخراج (>>) إدخالًا منسقًا مع هذا الإجراء عند تطبيقه على تدفق الإدخال.

حرف واحد: تسلسل الأحرف يأخذ الحرف التالي منه ويخزنه كقيمة 'c'. تتوقف عملية استخراج الأحرف من وتخزينها في s ، كسلسلة c ، (إذا لم يكن العرض صفراً) عند مواجهة حرف مسافة بيضاء أو استخراج الأحرف (العرض () -1).

استخراج rvalue: يتيح الاستخراج من كائنات rvalue istream ، والتي لها نفس نتيجة الاستخراج من lvalues: تستدعي >> Val.

مثال 1

في هذه الحالة ، سنفحص كيف نحصل على أي قيمة من المستخدم ثم نعرضها كنتيجة على الشاشة.

# تضمين
استخدام مساحة الاسم الأمراض المنقولة جنسيا ؛
int رئيسي ( )
{
int رقم ؛
كوت << 'الرجاء إدخال رقم ' ؛
يتناول الطعام >> رقم ؛
كوت << 'القيمة المدخلة هي:' << رقم << ' ' ؛
}

سنقوم بتضمين ملف الرأس . بعد ذلك ، سنستخدم مساحة الاسم 'std' في مساحة الاسم القياسية. نسمي الوظيفة main (). سيتم الإعلان عن المتغير المسمى 'no' في هذه الطريقة. يتم تمثيل نوع البيانات 'int' لهذا المتغير. مصطلح 'int' هو اختصار لعدد صحيح. بعد ذلك ، يتم استخدام عبارة 'cout'. هذا الأمر يطبع الخط.

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

مثال 2

في هذه الحالة ، سنرى كيف نحصل على أي اسم من المستخدم ثم نعرضه على الشاشة كنتيجة.

# تضمين
استخدام مساحة الاسم الأمراض المنقولة جنسيا ؛

int رئيسي ( )

{

شار اسم [ 125 ] ؛
كوت << 'أدخل أسمك' << endl ؛


يتناول الطعام >> ث ؛

يتناول الطعام . الحصول على خط ( اسم، 125 ) ؛

كوت << اسم << endl ؛

إرجاع 0 ؛

}

سنقوم بدمج ملف الرأس . بعد ذلك ، سوف نستخدم مساحة الاسم القياسية كـ 'std'. نستدعي الدالة main (). ضمن هذه الطريقة ، سنعلن عن متغير. هذا المتغير يحمل نوع البيانات 'char'. ثم يتم استخدام عبارة 'cout'. يعرض هذا الأمر النص 'أدخل اسمك' على الشاشة. بعد عرض هذا النص على الشاشة ، يقوم المستخدم بإدخال أي اسم. ثم نستخدم عبارة 'السينما'.

هذا الأمر يأخذ القيمة من المستخدم. سيتم تخزين الاسم المقدم في متغير 'ws'. هنا ، مرة أخرى ، سوف نستخدم أمر 'cin'. ضمن هذا الأمر ، يتم تطبيق وظيفة getline (). تحتوي هذه الوظيفة على المعلمة التي تتضمن الاسم الذي أدخله المستخدم وطول الاسم. سيتم استخدام الأمر 'cout' لإظهار الاسم الذي قدمه المستخدم. لإنهاء الكود ، سيتم استخدام الأمر 'return 0'.

استنتاج

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