البرمجة

قراءة القيم من سطر الأوامر في لغة C

في البداية، في لغة C، لا توجد نوع معين يسمى “string” كما في لغات برمجة أخرى مثل C++ أو Java. بدلاً من ذلك، يتم تمثيل السلاسل النصية باستخدام مصفوفة من الأحرف (مع نهاية السلسلة تحتوي على القيمة \0 للإشارة إلى نهاية السلسلة). عند قراءة سلسلة نصية من مدخل المستخدم باستخدام scanf، يمكنك استخدام %s ولكن يجب أن تتيح مساحة كافية للمدخل النصي لتخزينها دون تجاوز حدود المصفوفة.

المشكلة في السطر الذي ذكرته:

c
scanf("%[^\n]", sbuf.mtext);

هي أنه يقرأ سلسلة نصية حتى يصل إلى السطر الجديد (\n)، ولكنه لا يقوم بتضمين السطر الجديد في السلسلة. يمكن حل هذه المشكلة عن طريق إضافة \n في نمط القراءة لـ scanf:

c
scanf("%[^\n]%*c", sbuf.mtext);

هنا %[^\n] يقوم بقراءة أي حرف غير سطر جديد، و %*c يقوم بقراءة السطر الجديد نفسه وتجاهله.

إذا أردت الحصول على المدخل من سطر الأوامر (command line) بدلاً من مدخل المستخدم، يمكنك استخدام وسيطات الدالة main:

c
int main(int argc, char *argv[]) { // تأكد من أن واحد على الأقل من وسيط السطر الأمر مع البرنامج if (argc < 2) { printf("Usage: %s \n", argv[0]); return 1; } // استخدم الوسيط الثاني (argv[1]) كرسالة printf("Message: %s\n", argv[1]); return 0; }

في هذا المثال، argc هو عدد وسيطات السطر الأمر، و argv هو مصفوفة من السلاسل النصية تحتوي على وسيطات السطر الأمر. argv[0] هو اسم البرنامج نفسه، و argv[1] هو الوسيط الأول بعد اسم البرنامج وهو الرسالة التي تم تمريرها من سطر الأوامر.

المزيد من المعلومات

بالطبع! في لغة C، عندما تحتاج إلى الحصول على القيم من سطر الأوامر (command line)، يمكنك استخدام وسيطات الدالة main كما ذكرت سابقًا. هذه الوسيطات تمثل عدد الوسائط وقيمها كمصفوفة من السلاسل النصية.

علاوة على ذلك، في C، عندما تقوم بتعريف متغير وتريد تعيين قيمة له، يمكنك القيام بذلك عن طريق استخدام عامل التعيين =. على سبيل المثال:

c
int x; // تعريف متغير من نوع integer x = 10; // تعيين قيمة 10 للمتغير x

فيما يتعلق بـ scanf، فهو يستخدم للقراءة من مدخل المستخدم (مثل وظيفة cin في C++)، وتحديدًا يقوم بقراءة الإدخال حتى يتم العثور على محرف معين. على سبيل المثال، إذا كنت تريد قراءة عدد من النصوص من المستخدم:

c
char name[50]; // تعريف مصفوفة لتخزين الاسم printf("Enter your name: "); scanf("%s", name); // قراءة الاسم من المستخدم

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

زر الذهاب إلى الأعلى