Menu
CoddyTech

إدخال السلاسل النصية باستخدام scanf

جزء من قسم المنطق وتدفق التنفيذ في رحلة C على Coddy. الدرس 14 من 63.

الآن بعد أن فهمت كيفية عمل السلاسل النصية مع المحرف المنهي الفارغ، حان وقت تعلّم كيفية الحصول على مدخلات السلاسل النصية من المستخدمين. يمكن للدالة scanf قراءة السلاسل النصية باستخدام محدد التنسيق %s، لكن لها قيود مهمة عليك فهمها.

لقراءة سلسلة نصية باستخدام scanf، استخدم تنسيق %s ومرّر اسم مصفوفة المحارف (من دون عامل التشغيل &، لأن أسماء المصفوفات هي عناوين بالفعل):

char word[50];
printf("Enter a word: ");
scanf("%s", word);
printf("You entered: %s\n", word);

ومع ذلك، scanf("%s", ...) لديه قيد جوهري: يتوقف عن القراءة بمجرد أن يصادف أي محرف مسافة بيضاء (مسافة أو علامة تبويب أو سطرًا جديدًا). وهذا يعني أنه إذا كتب المستخدم "Hello World"، فلن تلتقط scanf سوى "Hello"، وستترك "World" في مخزن الإدخال المؤقت.

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

على الرغم من هذه القيود، تُعد scanf("%s", ...) مناسبة تمامًا لقراءة الكلمات المفردة، وهذا بالضبط ما ستتدرب عليه في التحدي القادم.

challenge icon

التحدي

سهل

اكتب برنامجًا بلغة C يوضّح قراءة مُدخلات نصية من المستخدم باستخدام scanf وعرضها مجددًا. يجب أن يقوم برنامجك بما يلي:

  1. يُصرّح عن مصفوفة محارف باسم username تتكوّن من 30 عنصرًا لتخزين مُدخلات المستخدم
  2. يُصرّح عن مصفوفة محارف باسم hobby تتكوّن من 25 عنصرًا لتخزين مُدخل آخر
  3. يستخدم printf لمطالبة المستخدم بالرسالة Enter your username:
  4. يستخدم scanf مع محدِّد التنسيق %s لقراءة اسم المستخدم في المصفوفة username
  5. يستخدم printf لمطالبة المستخدم بالرسالة Enter your hobby:
  6. يستخدم scanf مع محدِّد التنسيق %s لقراءة الهواية في المصفوفة hobby
  7. يطبع السلسلتين باستخدام printf بالتنسيق الدقيق الموضّح أدناه

سيُقدَّم الإدخال على هيئة كلمتين منفصلتين (من دون مسافات داخل أيٍّ منهما).

ينبغي أن يعرض الناتج النتائج بالتنسيق التالي:

Enter your username:
Enter your hobby:
Hello [username], your hobby is [hobby]!

على سبيل المثال، إذا أدخل المستخدم Alice بوصفه اسم المستخدم وreading بوصفها الهواية، فينبغي أن يكون الناتج:

Enter your username:
Enter your hobby:
Hello Alice, your hobby is reading!

يختبر هذا التحدي مدى فهمك لاستخدام scanf مع محدِّد التنسيق %s لقراءة المُدخلات النصية، والتصريح عن مصفوفة محارف بحجم كافٍ، ودمج مُدخلات المستخدم مع الناتج المنسّق باستخدام printf.

جرّب بنفسك

#include <stdio.h>

int main() {
    // TODO: صرّح عن مصفوفات المحارف هنا
    
    // TODO: اكتب الكود هنا لطلب الإدخال وقراءته
    
    // TODO: اطبع رسالة الإخراج النهائية
    
    return 0;
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس المنطق وتدفق التنفيذ

تدرّب بنفسك: مترجم C عبر الإنترنت