[Powered by Google Translate] [وسائط سطر الأوامر]
[كريستوفر بارثولوميو - جامعة هارفارد]
[هذا هو CS50 - CS50.TV]
هناك ميزة مفيدة لبرنامج هو لقبول إدخال المستخدم.
حتى الآن، لقد اكتشفنا بعض الوظائف داخل المكتبة CS50
لقبول إدخال المستخدم، مثل "الحصول على سلسلة"
الذي يطالب المستخدم، في حين يتم تشغيل التطبيق، عن سلسلة.
>> ومع ذلك، هناك حالات حيث تريد تقديم مدخلات البرنامج الخاص بك
قبل أن يشغل في الواقع.
بهذه الطريقة، لا تحتاج أن تسأل معلومات إضافية من المستخدم الخاص بك
أثناء تنفيذ مهمة بسيطة.
خذ على سبيل المثال، MV أو الأمر نقل في UNIX.
هذا الأمر يسمح للمستخدم لنقل ملف من موقع إلى آخر.
وفقا لدليل الصفحات، MV يقبل حجتين سطر الأوامر:
يتم الآن نقل الملف الذي وموقع يتم الآن نقل الملف إليه.
لذلك هذا المثال لديها الأمر مع اثنين من وسائط.
كيف لنا إذن أن نقول لدينا برنامج C للاستفادة من هذه الحجج سطر الأوامر؟
>> حسنا، تبين أن أهم، والتي نستخدمها في جميع البرامج C، له سر.
الرئيسية يقبل معلمتين: argc argv و.
دعونا نذهب أكثر من هذه الشروط.
>> المعلمة الأولى، argc، التي تقف على العد الحجة،
لديه نوع بيانات عدد صحيح.
المعلمة argc يحتوي على عدد من الحجج، بما في ذلك الأمر.
في الأمر تحركنا، وعلى الرغم من أننا فقط حجتين عرض،
وسوف تكون القيمة في argc 3.
المعلمة الثانية، argv، التي تقف على ناقلات الحجة،
هو مجموعة من المؤشرات التي تشير إلى شار السلاسل.
>> هذا يعني أن كل عنصر في argv، بدءا من الصفر،
تحتوي على الأمر والحجج.
على سبيل المثال، argv [0]، والتي سوف أود أن أشير إلى ما argv الصفر،
سوف تحتوي دائما الأمر الذي يتم تشغيل -
في هذه الحالة، MV.
argv [1] سوف تحتوي على الحجة، file.txt الأولى،
وargv [2] سوف تحتوي على الحجة الثانية، ~ / CS50 /.
فإن آخر حجة من argv تكون دائما فارغة.
لذلك دعونا تنفيذ هذه الحجج سطر الأوامر.
في التدريبات السابقة، وضعنا الفراغ، وهذا يعني شيئا، والمعلمة الرئيسي.
ومع ذلك، حتى يتسنى لنا استخدام وسائط سطر الأوامر،
نحن بحاجة إلى إزالة الفراغ ومكان داخل argc الباحث الرئيسي، تشار * argv [].
الآن، للوصول إلى العنصر بأكمله من argv، والتي هي حججك،
يمكنك ببساطة تكرار، أو حلقة، من خلال مجموعة من هذا القبيل.
لذلك، من داخل الجسم الرئيسي، ونحن ذاهبون الى المضي قدما واكتب عن الحلقة:
ل (كثافة العمليات ط = 0، وأنا <argc، وأنا + +).
>> نحن لسنا بحاجة لمتعرج هنا لأننا تنفيذ سطر واحد فقط من التعليمات البرمجية
داخل الجسم من هذه الحلقة.
سوف نذهب إلى الأمام وضرب التبويب مرة واحدة،
اكتب printf ("argv [٪ د]، لتمثيل قيمة عدد صحيح،
هو٪ s، لسلسلة، ثم حرف سطر جديد.
ثم نقدم printf لط التكرار الحالي للحلقة
وargv [أنا] لتمثيل سلسلة من سيطة سطر الأوامر الحالية.
عندما كنا تشغيله مع اثنين من الحجج، وسنرى الحجج التي يتم عرضها في المحطة.
قلنا في وقت سابق أن argv عقد مجموعة من المؤشرات شار.
>> لذلك، إذا كان هذا هو الحال، كيف يمكننا الوصول ثم الأحرف الفردية في كل حجة؟
على سبيل المثال، ما إذا كنت أرغب في البحث عن حرف معين في الوسيطة الأولى؟
حسنا، الجواب هو أننا بحاجة لتطبيق حلقة متداخلة
وأن تكرار ثم من خلال كل عنصر من العناصر في السلسلة الوسيطة.
هذا هو كيف نفعل ذلك.
>> أولا، نحن ذاهبون لجعل نسخة من example2.c.
ثم، داخل أول حلقة ل،
ونحن في طريقنا لإضافة حلقة إضافية ل.
ذلك ل (كثافة العمليات ي = 0، ن = التوابع strlen (argv [أنا])،
الذي يعطي لنا ثم طول الحجة الحالي،
؛ ي <ن؛ ي + +)
ونحن في طريقنا لطباعة كل حرف من الموقع
داخل الحجة الحالي باستخدام printf.
لذلك، printf ("argv [٪ د]، لتمثيل مؤشر ذي الحجة الحالي،
ثم [٪ د] مرة أخرى، لتمثيل الحرف الحالي للالحجة الحالي،
هو: ج٪، للحرف الحالي في الوسيطة.
وأخيرا، ونحن نقدم printf مع فهرس حلقة الخارجي، ط،
ثم فهرس الحلقة الداخلية.
>> وحجتنا الماضي لهو printf الحرف الفعلية المقدمة من الحجة
في سطر الأوامر.
الآن، لأنني استخدام الدالة سلسلة التوابع strlen للحصول على طول سلسلة،
يجب أن أضيف أيضا مكتبة string.h إلى أعلى يشمل لدينا.
لذلك، على أن تفعل ذلك، سنقوم ترتفع، وفقط تحت stdio.h، ونحن في طريقنا للقيام
# تشمل .
>> لذلك، دعونا ترجمة وتشغيل وتزويدها حجة الفعلية.
>> وكما يمكننا أن نرى، ونحن الآن لدينا المكان المحدد لكل شار الفردية في الوسيطة.
لذلك هذا كل شيء. أنا كريستوفر بارثولوميو، وهذا هو CS50.
[CS50.TV]