"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يتعامل "cin" مع الإدخال في لغة C++ ولماذا يُفضل "getline()" لقراءة الأسطر بأكملها؟

كيف يتعامل "cin" مع الإدخال في لغة C++ ولماذا يُفضل "getline()" لقراءة الأسطر بأكملها؟

تم النشر بتاريخ 2024-11-13
تصفح:279

How does `cin` handle input in C   and why is `getline()` preferred for reading entire lines?

سلوك دفق الإدخال باستخدام "cin"

عند قراءة الإدخال باستخدام دفق "cin" في لغة C، من المهم أن نفهم كيف يتم ذلك يتفاعل مع أنواع البيانات المختلفة. افتراضيًا، يقرأ "cin" الكلمة في كل مرة، مما قد يؤدي إلى سلوك غير متوقع عند التعامل مع مصفوفات الأحرف أو السلاسل.

في مثال التعليمات البرمجية المقدم، طريقة "input()" في "String" " يستخدم الفصل "cin >> str;" لقراءة سلسلة الإدخال. ومع ذلك، فإن هذا البيان يلتقط كلمة واحدة فقط، ويتجاهل أي كلمات لاحقة في الإدخال. ونتيجة لذلك، عندما يحتوي الإدخال على كلمات متعددة، مثل "ستيف هوكينج"، يتم تخزين الكلمة الأولى فقط، "ستيف"، في مصفوفة "str".

الحل: استخدام getline( ) لقراءة الأسطر الكاملة

لقراءة سطر كامل من الإدخال في مصفوفة أحرف، يمكن استخدام وظيفة "getline()" بدلاً من "cin >>". إليك طريقة الإدخال المحدثة باستخدام "getline()":

void input()
{
    cout 

يأخذ "getline()" وسيطتين: مؤشر إلى المصفوفة الوجهة وحجم المصفوفة. يقرأ الإدخال حتى تتم مواجهة حرف السطر الجديد، ويلتقط بشكل فعال سطر الإدخال بأكمله.

اعتبارات إضافية

تجدر الإشارة إلى أن استخدام مصفوفات الأحرف لمعالجة السلسلة يمكن أن يكون مرهقة وعرضة للخطأ. توفر مكتبة C القياسية فئة "std::string"، والتي توفر طريقة أكثر قوة وأمانًا للتعامل مع السلسلة. بدلاً من استخدام مصفوفات الأحرف، يمكن إعادة كتابة التعليمات البرمجية على النحو التالي:

#include 
#include 

class String
{
public:
    std::string str;

    void input()
    {
        cout 

أخيرًا، أصبح استخدام ملفات الرأس مثل "iostream.h" و"conio.h" قديمًا. يجب أن يستخدم تطوير لغة C الحديثة ملفات الرأس مثل "iostream" و"conio" على التوالي.

أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3