1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Command-Line Hujah] 2 00:00:02,000 --> 00:00:04,000 [Christopher Bartholomew - Universiti Harvard] 3 00:00:04,000 --> 00:00:07,000 [Ini adalah CS50 - CS50.TV] 4 00:00:07,000 --> 00:00:11,000 Satu ciri yang berguna untuk program adalah untuk menerima input pengguna. 5 00:00:11,000 --> 00:00:15,000 Setakat ini, kita telah diterokai beberapa fungsi dalam perpustakaan CS50 6 00:00:15,000 --> 00:00:18,000 untuk menerima input pengguna, seperti "mendapatkan tali," 7 00:00:18,000 --> 00:00:23,000 yang meminta pengguna, manakala permohonan itu sedang berjalan, untuk rentetan. 8 00:00:23,000 --> 00:00:28,000 >> Walau bagaimanapun, terdapat kes-kes di mana anda mahu untuk menyediakan input program anda 9 00:00:28,000 --> 00:00:30,000 sebelum ia sebenarnya berjalan. 10 00:00:30,000 --> 00:00:34,000 Cara ini, anda tidak perlu untuk meminta maklumat tambahan daripada pengguna anda 11 00:00:34,000 --> 00:00:38,000 semasa melaksanakan satu tugas yang mudah. 12 00:00:38,000 --> 00:00:42,000 Mengambil, sebagai contoh, mv atau perintah bergerak dalam UNIX. 13 00:00:42,000 --> 00:00:49,000 Arahan ini membolehkan pengguna untuk memindahkan fail dari satu lokasi ke lokasi yang lain. 14 00:00:49,000 --> 00:00:55,000 Menurut halaman manual, mv menerima dua hujah baris arahan: 15 00:00:55,000 --> 00:01:00,000 fail yang sedang bergerak dan lokasi fail sedang berpindah ke. 16 00:01:00,000 --> 00:01:06,000 Jadi, contoh ini mempunyai arahan dengan dua hujah. 17 00:01:06,000 --> 00:01:14,000 Jadi bagaimana kita memberitahu program C kami untuk menggunakan hujah-hujah baris arahan? 18 00:01:14,000 --> 00:01:20,000 >> Nah, ternyata bahawa utama, yang kita gunakan dalam semua program C, mempunyai rahsia. 19 00:01:20,000 --> 00:01:26,000 Main menerima dua parameter: argc dan argv. 20 00:01:26,000 --> 00:01:28,000 Mari kita pergi lebih syarat-syarat ini. 21 00:01:28,000 --> 00:01:33,000 >> Parameter pertama, argc, yang bermaksud kiraan hujah, 22 00:01:33,000 --> 00:01:36,000 mempunyai jenis data integer. 23 00:01:36,000 --> 00:01:42,000 Parameter argc mengandungi beberapa hujah, termasuk arahan. 24 00:01:42,000 --> 00:01:47,000 Dalam arahan langkah kita, walaupun kita hanya mempunyai dua hujah yang dipaparkan, 25 00:01:47,000 --> 00:01:50,000 nilai argc akan 3. 26 00:01:50,000 --> 00:01:56,000 Parameter kedua, argv, yang bermaksud hujah vektor, 27 00:01:56,000 --> 00:02:01,000 adalah pelbagai petunjuk char yang menunjukkan rentetan. 28 00:02:01,000 --> 00:02:06,000 >> Ini bermakna bahawa setiap elemen di argv, bermula dari sifar, 29 00:02:06,000 --> 00:02:09,000 mengandungi arahan dan hujah. 30 00:02:09,000 --> 00:02:16,000 Sebagai contoh, argv [0], yang saya akan rujuk sebagai argv sifar, 31 00:02:16,000 --> 00:02:20,000 akan sentiasa mengandungi arahan yang sedang berjalan - 32 00:02:20,000 --> 00:02:22,000 dalam kes ini, mv. 33 00:02:22,000 --> 00:02:28,000 argv [1] akan mengandungi hujah pertama, file.txt, 34 00:02:28,000 --> 00:02:37,000 dan argv [2] akan mengandungi hujah kedua, ~ / cs50 /. 35 00:02:37,000 --> 00:02:42,000 Hujah terakhir argv sentiasa akan batal. 36 00:02:42,000 --> 00:02:46,000 Jadi mari kita melaksanakan ini hujah baris arahan. 37 00:02:46,000 --> 00:02:53,000 Dalam latihan sebelumnya, kita diletakkan tidak sah, bermakna apa-apa, sebagai parameter utama. 38 00:02:53,000 --> 00:02:57,000 Walau bagaimanapun, dalam usaha untuk kita menggunakan hujah baris arahan, 39 00:02:57,000 --> 00:03:12,000 kita perlu membuang dalam terbatal dan tempat utama int argc, char * argv []. 40 00:03:12,000 --> 00:03:17,000 Sekarang, untuk mengakses keseluruhan elemen dari argv, yang hujah-hujah anda, 41 00:03:17,000 --> 00:03:21,000 anda hanya boleh melelar, atau gelung, melalui pelbagai seperti ini. 42 00:03:21,000 --> 00:03:27,000 Jadi, di dalam badan utama, kita akan pergi ke hadapan dan taip untuk gelung: 43 00:03:27,000 --> 00:03:37,000 (int i = 0; i 00:03:41,000 >> Kita tidak perlu bersedia kerinting di sini kerana kita hanya melaksanakan satu baris kod 45 00:03:41,000 --> 00:03:44,000 dalam badan gelung ini. 46 00:03:44,000 --> 00:03:47,000 Kami akan pergi ke hadapan dan memukul tab sekali, 47 00:03:47,000 --> 00:03:57,000 kemudian taipkan printf ("argv [% d], untuk mewakili nilai integer, 48 00:03:57,000 --> 00:04:06,000 % s, tali, maka aksara baris baru. 49 00:04:06,000 --> 00:04:12,000 Kemudian kami menyediakan printf i bagi lelaran semasa gelung 50 00:04:12,000 --> 00:04:18,000 dan argv [i] untuk perwakilan rentetan hujah baris arahan semasa. 51 00:04:18,000 --> 00:04:25,000 Apabila kita berjalan dengan dua hujah, kita akan melihat hujah-hujah yang dipaparkan di terminal. 52 00:04:34,000 --> 00:04:38,000 Sebelum ini kita berkata bahawa argv mengadakan pelbagai petunjuk char. 53 00:04:38,000 --> 00:04:45,000 >> Jadi, jika ini berlaku, bagaimana kita kemudian mengakses watak individu dalam hujah masing-masing? 54 00:04:45,000 --> 00:04:51,000 Sebagai contoh, apakah jika saya mahu mencari watak tertentu dalam hujah pertama? 55 00:04:51,000 --> 00:04:55,000 Nah, jawapannya ialah bahawa kita perlu memohon gelung bersarang 56 00:04:55,000 --> 00:04:59,000 yang kemudiannya akan melelar melalui setiap unsur dalam rentetan hujah. 57 00:04:59,000 --> 00:05:02,000 Ini adalah bagaimana anda melakukannya. 58 00:05:02,000 --> 00:05:10,000 >> Pertama, kita pergi untuk membuat salinan example2.c. 59 00:05:10,000 --> 00:05:13,000 Kemudian, di dalam pertama untuk gelung, 60 00:05:13,000 --> 00:05:15,000 kita akan menambah tambahan untuk gelung. 61 00:05:15,000 --> 00:05:28,000 Jadi untuk (int j = 0, n = strlen (argv [i]), 62 00:05:28,000 --> 00:05:32,000 yang kemudian memberikan kita panjang hujah semasa, 63 00:05:32,000 --> 00:05:39,000 ; J 00:05:43,000 Kami akan mencetak lokasi setiap aksara 65 00:05:43,000 --> 00:05:47,000 dalam hujah semasa dengan menggunakan printf. 66 00:05:47,000 --> 00:05:57,000 Jadi, printf ("argv [% d], untuk mewakili indeks hujah semasa, 67 00:05:57,000 --> 00:06:05,000 maka [% d] sekali lagi, untuk mewakili watak semasa hujah semasa, 68 00:06:05,000 --> 00:06:13,000 : c%, untuk watak semasa dalam hujah. 69 00:06:13,000 --> 00:06:20,000 Akhir sekali, kami menyediakan printf dengan indeks gelung luar, i, 70 00:06:20,000 --> 00:06:22,000 maka indeks bagi gelung dalaman. 71 00:06:22,000 --> 00:06:28,000 >> Dan hujah terakhir kami untuk printf adalah watak sebenar dari hujah disediakan 72 00:06:28,000 --> 00:06:31,000 pada baris arahan. 73 00:06:31,000 --> 00:06:37,000 Sekarang, kerana saya menggunakan fungsi tali strlen untuk mendapatkan panjang rentetan, 74 00:06:37,000 --> 00:06:43,000 Saya juga mesti menambah perpustakaan string.h ke atas termasuk kami. 75 00:06:43,000 --> 00:06:50,000 Jadi, untuk berbuat demikian, kita akan pergi ke atas, dan hanya di bawah stdio.h, kita akan lakukan 76 00:06:50,000 --> 00:06:57,000 # Include . 77 00:06:57,000 --> 00:07:02,000 >> Jadi, mari kita menyusun dan menjalankan dan memberikan ia satu hujah yang sebenar. 78 00:07:09,000 --> 00:07:18,000 >> Dan, seperti yang kita boleh lihat, kita kini mempunyai lokasi sebenar char setiap individu dalam hujah. 79 00:07:18,000 --> 00:07:23,000 Jadi itulah ia. Saya Christopher Bartholomew; ini adalah CS50. 80 00:07:23,000 --> 00:07:26,000 [CS50.TV]