[Powered by Google Translate] [Command-Line Arguments]
[Christopher Bartholomew - Harvard University]
[Ini adalah CS50 - CS50.TV]
Sebuah fitur yang berguna untuk program adalah untuk menerima masukan pengguna.
Sejauh ini, kami telah dieksplorasi beberapa fungsi dalam perpustakaan CS50
untuk menerima input pengguna, seperti "mendapatkan string,"
yang mendorong pengguna, sedangkan aplikasi berjalan, untuk string.
>> Namun, ada kasus di mana Anda ingin memberikan masukan program anda
sebelum benar-benar berjalan.
Dengan cara ini, Anda tidak perlu meminta informasi tambahan dari pengguna Anda
saat mengeksekusi tugas sederhana.
Ambil, misalnya, mv atau perintah bergerak dalam UNIX.
Perintah ini memungkinkan pengguna untuk memindahkan file dari satu lokasi ke lokasi lain.
Menurut laman manual, mv menerima argumen perintah dua baris:
file yang sedang dipindahkan dan lokasi file tersebut dipindahkan ke.
Jadi contoh ini memiliki perintah dengan dua argumen.
Jadi bagaimana kita memberitahu kami program C untuk memanfaatkan argumen baris perintah?
>> Nah, ternyata utama, yang kita gunakan dalam semua program C, memiliki rahasia.
Main menerima dua parameter: argc dan argv.
Mari kita pergi ke istilah-istilah ini.
>> Parameter pertama, argc, yang merupakan singkatan dari jumlah argumen,
memiliki tipe data integer.
Parameter argc berisi jumlah argumen, termasuk perintah.
Dalam perintah gerakan kami, meskipun kami hanya memiliki dua argumen ditampilkan,
nilai argc akan menjadi 3.
Parameter kedua, argv, yang merupakan singkatan dari vektor argumen,
adalah sebuah array dari pointer char yang menunjuk ke string.
>> Ini berarti bahwa setiap elemen dalam argv, mulai dari nol,
berisi perintah dan argumen.
Misalnya, argv [0], yang saya akan sebut sebagai argv nol,
selalu akan berisi perintah yang sedang dijalankan -
dalam hal ini, mv.
argv [1] akan berisi argumen pertama, file.txt,
dan argv [2] akan berisi argumen kedua, ~ / cs50 /.
Argumen terakhir dari argv akan selalu nol.
Jadi mari kita menerapkan argumen baris perintah.
Pada latihan sebelumnya, kami menempatkan batal, berarti apa-apa, sebagai parameter utama itu.
Namun, dalam rangka bagi kita untuk menggunakan argumen baris perintah,
kita perlu untuk menghapus dalam kekosongan dan tempat argc int main, char * argv [].
Sekarang, untuk mengakses seluruh elemen dari argv, yang merupakan argumen Anda,
Anda hanya dapat iterate, atau loop, melalui array seperti ini.
Jadi, dalam tubuh utama, kita akan pergi ke depan dan ketik untuk loop:
for (int i = 0; i <argc; i + +).
>> Kita tidak perlu penjepit keriting di sini karena kita hanya melaksanakan satu baris kode
dalam tubuh loop ini.
Kami akan pergi ke depan dan memukul tab sekali,
kemudian ketik printf ("argv [% d], untuk mewakili nilai integer,
adalah% s, untuk string, maka karakter baris baru.
Kemudian kami menyediakan printf i untuk iterasi saat loop
dan argv [i] untuk representasi string dari argumen baris perintah saat ini.
Ketika kita menjalankannya dengan dua argumen, kita akan melihat argumen yang ditampilkan di terminal.
Sebelumnya kita mengatakan bahwa argv mengadakan sebuah array dari pointer char.
>> Jadi, jika hal ini terjadi, bagaimana kita kemudian mengakses karakter individu dalam argumen masing-masing?
Sebagai contoh, bagaimana jika saya ingin mencari karakter tertentu dalam argumen pertama?
Nah, jawabannya adalah bahwa kita perlu menerapkan nested loop
yang kemudian akan iterate melalui setiap elemen dalam argumen string.
Ini adalah bagaimana Anda melakukannya.
>> Pertama, kita akan membuat salinan example2.c.
Kemudian, di dalam yang pertama untuk loop,
kita akan menambahkan tambahan untuk loop.
Jadi untuk (int j = 0, n = strlen (argv [i]),
yang kemudian memberi kita panjang argumen saat ini,
, J <n, j + +)
Kita akan mencetak lokasi masing-masing karakter
dalam argumen saat ini dengan menggunakan printf.
Jadi, printf ("argv [% d], untuk mewakili indeks dari argumen saat ini,
kemudian [% d] sekali lagi, untuk mewakili karakter saat argumen saat ini,
adalah: c%, untuk karakter saat ini dalam argumen.
Terakhir, kami menyediakan printf dengan indeks loop luar, i,
maka indeks loop batin.
>> Dan argumen terakhir kami untuk printf adalah karakter yang sebenarnya dari argumen disediakan
pada baris perintah.
Sekarang, karena saya menggunakan fungsi string strlen untuk mendapatkan panjang string,
Saya juga harus menambahkan perpustakaan string.h ke atas termasuk kami.
Jadi, untuk melakukan itu, kita akan naik, dan hanya di bawah stdio.h, kita akan lakukan
# Include .
>> Jadi, mari kita mengkompilasi dan menjalankan dan memberikan itu sebuah argumen aktual.
>> Dan, seperti yang kita lihat, kita sekarang memiliki lokasi yang tepat dari setiap char individu dalam argumen.
Jadi itu saja. Saya Christopher Bartholomew, ini adalah CS50.
[CS50.TV]