0Pricing
C++ Academy · درس

قراءة الإدخال بأمان باستخدام getline

استخدم std::getline لقراءة الأسطر، وتحقّق من إدخال المستخدم قبل استخدامه.

قراءة الإدخال بأمان باستخدام getline درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.

أهمية الإدخال الآمن

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

أساسيات std::getline

تقرأ std::getline(stream, line) المحارف حتى السطر الجديد التالي. ويُستهلك محرف السطر الجديد لكنه لا يُخزَّن.

std::string line;
std::getline(std::cin, line);

محدِّدات مخصصة

مرّر وسيطًا ثالثًا للتوقف عند أي محرف، وليس عند السطر الجديد فقط.

std::string field;
std::getline(std::cin, field, ',');

التحقق من الإدخال الرقمي

اقرأ السطر كاملًا أولًا، ثم حلّله. فهذا يتجنب دخول cin في حالة الفشل عند تنسيق الإدخال بطريقة غير صحيحة.

std::string line;
int n;
if (std::getline(std::cin, line)) {
    try {
        n = std::stoi(line);
    } catch (...) {
        std::cout << "Invalid number\n";
    }
}

التكرار حتى تصبح القيمة صالحة

اجمع بين getline وtry/catch لمواصلة طلب الإدخال حتى يقدّم المستخدم قيمة صالحة.

int age;
while (true) {
    std::cout << "Age: ";
    std::string line;
    std::getline(std::cin, line);
    try {
        age = std::stoi(line);
        if (age >= 0 && age < 150) break;
    } catch (...) {}
    std::cout << "Try again.\n";
}

اكتشاف EOF في getline

تضبط getline التدفق على حالة الفشل عند الوصول إلى EOF. تحقّق من التدفق بعد الاستدعاء.

std::string line;
while (std::getline(std::cin, line)) {
    process(line);
}

إزالة المسافات البيضاء

غالبًا ما يضيف المستخدمون مسافات زائدة. أزل المسافات البيضاء من الطرفين بعد القراءة.

void trim(std::string& s) {
    size_t start = s.find_first_not_of(" \t\r\n");
    size_t end   = s.find_last_not_of(" \t\r\n");
    s = (start == std::string::npos) ? "" : s.substr(start, end - start + 1);
}

مسح التدفق

إذا خلطت بين >> وgetline، فامسح المحارف المتبقية أولًا.

std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

قراءة قيم متعددة في السطر

اقرأ السطر كاملًا، ثم مرّره إلى stringstream واستخرج القيم منه.

std::string line;
std::getline(std::cin, line);
std::istringstream iss(line);
int a, b, c;
iss >> a >> b >> c;

الحماية من الطول الأقصى

ارفض الإدخال الذي يتجاوز الطول المسموح به مبكرًا لمنع استهلاك الموارد دون قصد.

std::string line;
if (std::getline(std::cin, line) && line.size() > 1024) {
    std::cout << "Input too long.\n";
    return 1;
}

قراءة كلمات المرور أو الإدخال المخفي

لا تخفي المكتبة القياسية الإدخال المعروض على الشاشة. استخدم واجهات برمجة التطبيقات الخاصة بالمنصة، مثل termios في Unix أو SetConsoleMode في Windows، لطلبات كلمات المرور.

تحقق سريع

لماذا تكون القراءة باستخدام getline ثم التحليل أكثر أمانًا من استخدام std::cin >> n؟

مراجعة

اقرأ إدخال المستخدم باستخدام std::getline، ثم تحقّق منه أو حلّله بشكل منفصل، وأزل المسافات البيضاء. ضع التحليل داخل try/catch وكرّر العملية حتى تحصل على قيمة صالحة. وامسح التدفق عند الخلط بين الاستخراج وقراءة الأسطر.

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

هل درس «قراءة الإدخال بأمان باستخدام getline» مجاني؟

نعم — نص درس «قراءة الإدخال بأمان باستخدام getline» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.

ماذا ستتعلم في «قراءة الإدخال بأمان باستخدام getline»؟

استخدم std::getline لقراءة الأسطر، وتحقّق من إدخال المستخدم قبل استخدامه. تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟

لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «قراءة الإدخال بأمان باستخدام getline»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟

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

جميع الدروس في هذه الدورة

  1. استخدام std::cin وstd::cout بطريقة صحيحة
  2. تنسيق الإخراج باستخدام iomanip
  3. قراءة الإدخال بأمان باستخدام getline
  4. التعامل مع std::cerr وstd::clog
← العودة إلى C++ Academy