1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [وسائط سطر الأوامر] 2 00:00:02,000 --> 00:00:04,000 [كريستوفر بارثولوميو - جامعة هارفارد] 3 00:00:04,000 --> 00:00:07,000 [هذا هو CS50 - CS50.TV] 4 00:00:07,000 --> 00:00:11,000 هناك ميزة مفيدة لبرنامج هو لقبول إدخال المستخدم. 5 00:00:11,000 --> 00:00:15,000 حتى الآن، لقد اكتشفنا بعض الوظائف داخل المكتبة CS50 6 00:00:15,000 --> 00:00:18,000 لقبول إدخال المستخدم، مثل "الحصول على سلسلة" 7 00:00:18,000 --> 00:00:23,000 الذي يطالب المستخدم، في حين يتم تشغيل التطبيق، عن سلسلة. 8 00:00:23,000 --> 00:00:28,000 >> ومع ذلك، هناك حالات حيث تريد تقديم مدخلات البرنامج الخاص بك 9 00:00:28,000 --> 00:00:30,000 قبل أن يشغل في الواقع. 10 00:00:30,000 --> 00:00:34,000 بهذه الطريقة، لا تحتاج أن تسأل معلومات إضافية من المستخدم الخاص بك 11 00:00:34,000 --> 00:00:38,000 أثناء تنفيذ مهمة بسيطة. 12 00:00:38,000 --> 00:00:42,000 خذ على سبيل المثال، MV أو الأمر نقل في UNIX. 13 00:00:42,000 --> 00:00:49,000 هذا الأمر يسمح للمستخدم لنقل ملف من موقع إلى آخر. 14 00:00:49,000 --> 00:00:55,000 وفقا لدليل الصفحات، MV يقبل حجتين سطر الأوامر: 15 00:00:55,000 --> 00:01:00,000 يتم الآن نقل الملف الذي وموقع يتم الآن نقل الملف إليه. 16 00:01:00,000 --> 00:01:06,000 لذلك هذا المثال لديها الأمر مع اثنين من وسائط. 17 00:01:06,000 --> 00:01:14,000 كيف لنا إذن أن نقول لدينا برنامج C للاستفادة من هذه الحجج سطر الأوامر؟ 18 00:01:14,000 --> 00:01:20,000 >> حسنا، تبين أن أهم، والتي نستخدمها في جميع البرامج C، له سر. 19 00:01:20,000 --> 00:01:26,000 الرئيسية يقبل معلمتين: argc argv و. 20 00:01:26,000 --> 00:01:28,000 دعونا نذهب أكثر من هذه الشروط. 21 00:01:28,000 --> 00:01:33,000 >> المعلمة الأولى، argc، التي تقف على العد الحجة، 22 00:01:33,000 --> 00:01:36,000 لديه نوع بيانات عدد صحيح. 23 00:01:36,000 --> 00:01:42,000 المعلمة argc يحتوي على عدد من الحجج، بما في ذلك الأمر. 24 00:01:42,000 --> 00:01:47,000 في الأمر تحركنا، وعلى الرغم من أننا فقط حجتين عرض، 25 00:01:47,000 --> 00:01:50,000 وسوف تكون القيمة في argc 3. 26 00:01:50,000 --> 00:01:56,000 المعلمة الثانية، argv، التي تقف على ناقلات الحجة، 27 00:01:56,000 --> 00:02:01,000 هو مجموعة من المؤشرات التي تشير إلى شار السلاسل. 28 00:02:01,000 --> 00:02:06,000 >> هذا يعني أن كل عنصر في argv، بدءا من الصفر، 29 00:02:06,000 --> 00:02:09,000 تحتوي على الأمر والحجج. 30 00:02:09,000 --> 00:02:16,000 على سبيل المثال، argv [0]، والتي سوف أود أن أشير إلى ما argv الصفر، 31 00:02:16,000 --> 00:02:20,000 سوف تحتوي دائما الأمر الذي يتم تشغيل - 32 00:02:20,000 --> 00:02:22,000 في هذه الحالة، MV. 33 00:02:22,000 --> 00:02:28,000 argv [1] سوف تحتوي على الحجة، file.txt الأولى، 34 00:02:28,000 --> 00:02:37,000 وargv [2] سوف تحتوي على الحجة الثانية، ~ / CS50 /. 35 00:02:37,000 --> 00:02:42,000 فإن آخر حجة من argv تكون دائما فارغة. 36 00:02:42,000 --> 00:02:46,000 لذلك دعونا تنفيذ هذه الحجج سطر الأوامر. 37 00:02:46,000 --> 00:02:53,000 في التدريبات السابقة، وضعنا الفراغ، وهذا يعني شيئا، والمعلمة الرئيسي. 38 00:02:53,000 --> 00:02:57,000 ومع ذلك، حتى يتسنى لنا استخدام وسائط سطر الأوامر، 39 00:02:57,000 --> 00:03:12,000 نحن بحاجة إلى إزالة الفراغ ومكان داخل argc الباحث الرئيسي، تشار * argv []. 40 00:03:12,000 --> 00:03:17,000 الآن، للوصول إلى العنصر بأكمله من argv، والتي هي حججك، 41 00:03:17,000 --> 00:03:21,000 يمكنك ببساطة تكرار، أو حلقة، من خلال مجموعة من هذا القبيل. 42 00:03:21,000 --> 00:03:27,000 لذلك، من داخل الجسم الرئيسي، ونحن ذاهبون الى المضي قدما واكتب عن الحلقة: 43 00:03:27,000 --> 00:03:37,000 ل (كثافة العمليات ط = 0، وأنا 00:03:41,000 >> نحن لسنا بحاجة لمتعرج هنا لأننا تنفيذ سطر واحد فقط من التعليمات البرمجية 45 00:03:41,000 --> 00:03:44,000 داخل الجسم من هذه الحلقة. 46 00:03:44,000 --> 00:03:47,000 سوف نذهب إلى الأمام وضرب التبويب مرة واحدة، 47 00:03:47,000 --> 00:03:57,000 اكتب printf ("argv [٪ د]، لتمثيل قيمة عدد صحيح، 48 00:03:57,000 --> 00:04:06,000 هو٪ s، لسلسلة، ثم حرف سطر جديد. 49 00:04:06,000 --> 00:04:12,000 ثم نقدم printf لط التكرار الحالي للحلقة 50 00:04:12,000 --> 00:04:18,000 وargv [أنا] لتمثيل سلسلة من سيطة سطر الأوامر الحالية. 51 00:04:18,000 --> 00:04:25,000 عندما كنا تشغيله مع اثنين من الحجج، وسنرى الحجج التي يتم عرضها في المحطة. 52 00:04:34,000 --> 00:04:38,000 قلنا في وقت سابق أن argv عقد مجموعة من المؤشرات شار. 53 00:04:38,000 --> 00:04:45,000 >> لذلك، إذا كان هذا هو الحال، كيف يمكننا الوصول ثم الأحرف الفردية في كل حجة؟ 54 00:04:45,000 --> 00:04:51,000 على سبيل المثال، ما إذا كنت أرغب في البحث عن حرف معين في الوسيطة الأولى؟ 55 00:04:51,000 --> 00:04:55,000 حسنا، الجواب هو أننا بحاجة لتطبيق حلقة متداخلة 56 00:04:55,000 --> 00:04:59,000 وأن تكرار ثم من خلال كل عنصر من العناصر في السلسلة الوسيطة. 57 00:04:59,000 --> 00:05:02,000 هذا هو كيف نفعل ذلك. 58 00:05:02,000 --> 00:05:10,000 >> أولا، نحن ذاهبون لجعل نسخة من example2.c. 59 00:05:10,000 --> 00:05:13,000 ثم، داخل أول حلقة ل، 60 00:05:13,000 --> 00:05:15,000 ونحن في طريقنا لإضافة حلقة إضافية ل. 61 00:05:15,000 --> 00:05:28,000 ذلك ل (كثافة العمليات ي = 0، ن = التوابع strlen (argv [أنا])، 62 00:05:28,000 --> 00:05:32,000 الذي يعطي لنا ثم طول الحجة الحالي، 63 00:05:32,000 --> 00:05:39,000 ؛ ي <ن؛ ي + +) 64 00:05:39,000 --> 00:05:43,000 ونحن في طريقنا لطباعة كل حرف من الموقع 65 00:05:43,000 --> 00:05:47,000 داخل الحجة الحالي باستخدام printf. 66 00:05:47,000 --> 00:05:57,000 لذلك، printf ("argv [٪ د]، لتمثيل مؤشر ذي الحجة الحالي، 67 00:05:57,000 --> 00:06:05,000 ثم [٪ د] مرة أخرى، لتمثيل الحرف الحالي للالحجة الحالي، 68 00:06:05,000 --> 00:06:13,000 هو: ج٪، للحرف الحالي في الوسيطة. 69 00:06:13,000 --> 00:06:20,000 وأخيرا، ونحن نقدم printf مع فهرس حلقة الخارجي، ط، 70 00:06:20,000 --> 00:06:22,000 ثم فهرس الحلقة الداخلية. 71 00:06:22,000 --> 00:06:28,000 >> وحجتنا الماضي لهو printf الحرف الفعلية المقدمة من الحجة 72 00:06:28,000 --> 00:06:31,000 في سطر الأوامر. 73 00:06:31,000 --> 00:06:37,000 الآن، لأنني استخدام الدالة سلسلة التوابع strlen للحصول على طول سلسلة، 74 00:06:37,000 --> 00:06:43,000 يجب أن أضيف أيضا مكتبة string.h إلى أعلى يشمل لدينا. 75 00:06:43,000 --> 00:06:50,000 لذلك، على أن تفعل ذلك، سنقوم ترتفع، وفقط تحت stdio.h، ونحن في طريقنا للقيام 76 00:06:50,000 --> 00:06:57,000 # تشمل . 77 00:06:57,000 --> 00:07:02,000 >> لذلك، دعونا ترجمة وتشغيل وتزويدها حجة الفعلية. 78 00:07:09,000 --> 00:07:18,000 >> وكما يمكننا أن نرى، ونحن الآن لدينا المكان المحدد لكل شار الفردية في الوسيطة. 79 00:07:18,000 --> 00:07:23,000 لذلك هذا كل شيء. أنا كريستوفر بارثولوميو، وهذا هو CS50. 80 00:07:23,000 --> 00:07:26,000 [CS50.TV]