>> [MUSIC nagpe-play]
>> DOUG LLOYD: Lahat ng karapatan, kaya sabihin makipag-usap tungkol sa mga argumento command-line.
Kaya, sa ngayon sa kurso pretty magkano ang lahat ng iyong mga programa
ay malamang na nagsimula tulad this-- int pangunahing walang bisa.
Aming na-kolekta input ng gumagamit kung kailangan namin ito
sa aming mga programa, tulad ng mga Program Mario, halimbawa,
sa pamamagitan ng in-program senyas.
Hindi namin kailangan upang baguhin ang deklarasyon ng main,
dahil sa halip sa loob ng main namin sabihin lang, maaari kang tumawag ito upang makakuha ng int.
Paano malaki ang gusto ninyong gawin ang mga pyramid na?
O maaari kang tumawag ito upang makakuha ng float kung magkano ang baguhin
dapat na output ko sa user?
>> May isa pang paraan bagaman, at kung gusto namin ang aming mga gumagamit
na maaaring magbigay sa data sa aming programa
sa runtime sa halip ng habang ang program ay tumatakbo,
isang banayad na pagkakaiba ngunit minsan isang lubhang kapaki-pakinabang sa isa,
kailangan namin ng isang bagong form ng deklarasyon main.
Hindi namin maaaring gamitin int pangunahing walang bisa kung gusto naming mangolekta ng iba pang mga data sa command-line
kapag naubos na ang gumagamit sa programa, samakatuwid command-line argumento.
>> Upang mangolekta ng mga command-line argumento mula sa gumagamit,
baguhin ang iyong deklarasyon ng pangunahing upang magmukhang this-- int
main, bukas paren, int argc, kuwit, string argv, square bracket,
at pagkatapos ay buksan kulot suhay.
Kaya kung ano ang ibig sabihin na mayroon?
Well, kami ay pagpasa sa dalawang mga parameter, o mga argument, o input sa main.
One, na isang integer na tinatawag na argc, at ang iba pang ay kung ano?
Ito ay isang hanay ng mga string, i-right?
Nakita namin na notation square bracket.
Ito ay isang hanay ng mga string.
Ito ay hindi isang indibidwal na string, ito ay isang array ng mga string.
At ang mga ito ng dalawang argumento, argc at argv, daan sa iyo upang malaman kung ano ang data sa user
ay nagbigay sa command-line at kung gaano karaming mga bagay na kanilang
ibinigay sa command-line.
Medyo kapaki-pakinabang na mga bagay upang gumana sa.
>> Argc ibig sabihin para sa count argument, at dapat mong malaman, sa daan,
na maaari mong tawagan argc kahit anong gusto mo dito.
Maaari kang tumawag sa argv anuman na iyong nais.
Ang mga ito ay lamang ng maginoo mga pangalan na ginagamit namin para count them-- argument,
at dahil kakailanganin namin makita sa isang segundo, argument vector, argv.
Ngunit hindi mo na kailangang tumawag sa kanila argc at argv kung hindi mo nais na,
ngunit conventionally, na kung ano ang ginagawa namin.
>> Kaya pa rin, argc, ang bilang argument.
Ito ay isang integer-type variable at iba, tulad ng maaari mong asahan, kung kami ay may dalawang mga bagay-bagay
na namin ang pagpunta sa maging sa paghahanap kung ano ang mga ito ay nag-type
at kung magkano ang mga bagay-bagay sa nag-type sa paggamit, argc ay
pagpunta sa sabihin sa amin kung magkano bagay-bagay ang user na nai-type.
Kaya ito ay nagbibigay sa iyo ng isang bilang ng mga command-line argumento user
type kapag ang programa ay pinaandar.
Kaya kung ang iyong programa ay tumakbo dot slash sakim,
at sa loob ng iyong matakaw programa ang iyong pangunahing pag-andar
Wala ang deklarasyon int pangunahing int argc, string argv square bracket, at pagkatapos ay
argc sa kasong iyon ay isa.
Ngayon pansinin namin na hindi namin bilangin kung gaano karaming mga bagay-bagay
nai-type ng gumagamit matapos ang pangalan ng programa.
Ang pangalan mismo program binibilang bilang argument command-line.
>> Kaya dot slash sakim, sa ganitong kaso, argc ay isa.
Kung ang user ay nag-type slash matakaw 1024 CS50 sa command-line, argc sa kasong iyon
magiging tatlo.
At nalalaman natin na ito dahil ang mga paraan na ang mga dibisyon sa pagitan ng mga string
ay nakita ay kung doon ay isang puwang, o ang isang tab,
o isang bagay tulad na sa pagitan ng mga ito.
Kaya ang anumang mga halaga ng puting espasyo, tinatawag na, pagitan ng mga halaga na nai-type sa command-line
ay nagpapahiwatig kung gaano karaming mga may.
Kaya dot slash matakaw space 1024 space CS50, argc, sa kasong iyon, ang tatlo.
>> Argv ay ang argument vector.
Vector, sa daan, ay lamang isa pang salita para sa isang array,
at ito ay isang array na nag-iimbak ng mga string.
One string sa bawat elemento, na kung saan ay sa mga string na ang gumagamit ay talagang
nag-type sa command-line kapag ang programa ay naisakatuparan.
Ngayon, tulad ng kaso sa anumang array, kung ikaw
pagpapabalik mula sa aming mga talakayan ng array, ang unang elemento ng argv
ay palaging pagpunta sa matagpuan sa argv square bracket zero.
Iyan ang unang index ng argv array.
Kaya na will-- at sa katunayan, na kalooban palaging magiging ang pangalan ng programa,
ay laging matatagpuan sa argv square bracket zero.
>> Ang huling elemento ng argv ay laging natagpuan sa argv square bracket argc minus isa.
Nakikita mo ba kung bakit?
Tandaan kung gaano karaming mga elemento umiiral sa array na ito.
Well, alam namin na- ito ay argc bilang ng mga elemento.
Kung nai-type ng gumagamit ang tatlong bagay na ito sa ang command-line, argc ay tatlo.
Ngunit dahil sa c, kapag na namin ang pagtatrabaho may array, ang bawat elemento ng array,
o sa halip ng mga indeks ng array, magsimula sa zero.
Kung kami ay may tatlong mga sangkap sa ating array, kami ay may isang elemento sa argv zero,
isang elemento sa argv isa, at isang elemento sa argv dalawa.
Walang element sa argv tatlo, at isang hanay ng mga laki ng tatlo.
Kaya na ang dahilan kung bakit ang huling elemento ng argv maaari lagi
matagpuan sa argv square bracket argc minus isa.
>> Kaya sabihin ipagpalagay sa executes user ang matakaw programa bilang follows--
kung nag-type sila sa command-line na tuldok slash matakaw space 1024 space CS50,
at para sa anumang dahilan na namin naka handa ang aming matakaw program
malaman at gumagana sa mga command-line argumento.
Hindi namin ginawa dati kapag kami ay nagtrabaho sa mga ito para sa mga sakim na problema,
ngunit sabihin natin ngayon na namin binago ito upang ang proseso ng ginagawa namin
ang mga argumento command-line sa ilang paraan.
Sa kasong ito, argv zero ay tuldok slash matakaw.
Ano ang argv ng isa?
Well, ito ay 1024, tama?
Ito ay 1024, ngunit narito ang isang talagang mahalaga distinction--
naaalala mo ang uri ng data ng argv?
>> Ito mga tindahan ng mga string, i-right?
Ngunit mukhang 1024 ay isang integer value.
Ito ay isang tunay na mahalaga pagkakaiba, at ito ay talagang
pagpunta sa maging isang bagay na ikaw maaaring makaharap sa problema mamaya.
Lahat ng bagay sa argv ay naka-imbak bilang isang string.
Kaya contents argv isa ay ang string isa, zero, dalawa, apat,
na binubuo ng mga apat na mga character.
Ito ay bilang kung nag-type ang user isa, zero, dalawa, apat
bilang mga indibidwal na mga titik o character.
Ito ay hindi ang integer 1024, at upang hindi ka maaaring direktang
gumagana sa mga ito sa pamamagitan ng pagsasabi int 1000, o sa halip int x ay katumbas ng argv isa minus 24.
>> Intuitively, maaari mong isipin na bilang, OK, na rin ito ay 1024 minus 24,
kaya x ay katumbas ng 1,000.
Ngunit sa katunayan, hindi iyon ang kaso, dahil argv isa ay isang string.
Ang string 1024.
Ngayon ay mayroong ay isang function na ay maaaring maging ginagamit upang i-convert ng mga string na integer.
Hindi ko sayangin ito para sa iyo ngayon, ngunit ako sigurado Zamyla
ay magiging masaya na sabihin sa iyo ang tungkol dito sa ang walkthrough para sa isang problema sa hinaharap.
Ngunit maaari mo ring mahanap problema like-- excuse
sa akin, pag-andar na gagawin gawin ito sa reference 50,
kung pumunta ka sa gabay na sanggunian maaari mong mahanap ang isang function na
ay gumawa ng conversion na ito para sa iyo.
Ngunit muli, sa walkthrough para sa isang problema na hinaharap,
Zamyla ay magiging masaya na sabihin sa iyo kung ano ang function
ito ay na-convert ang string 1024 sa integer 1024.
>> Lahat ng karapatan, kaya lumipat sa.
Sakop namin ang aming argv zero, na sakop namin argv isa.
Ano ang sa argv dalawa?
CS50.
Ang isang iyon ay marahil medyo maliwanag.
Ano ang sa argv tatlo?
Well muli, kami ay hindi talaga alam, di ba?
Kami ay may isang hanay ng mga laki ng tatlo, na kung paano maraming mga sangkap sa user
nag-type sa command-line, kaya kung pumunta kami sa argv tatlo,
ngayon kami ay overstepping ang mga hangganan ng aming array.
Ang tagatala ay ipaalam sa amin gawin ito, walang intuitive problema sa ito,
ngunit sa mga tuntunin ng tunay na kung ano ang nangyayari mangyari, hindi namin talaga alam.
Ito ay depende sa kung ano ang na matatagpuan sa memorya kung saan
argv tatlong ay inaasahan na maging.
At kaya maaaring magtapos up namin pagkuha ng malayo pahirap libre.
Mas malamang kaysa hindi, lalo na kapag ikaw ay nagtatrabaho sa argv bilang laban
sa anumang ibang mga array na ang dahilan sa aming programa,
marahil kami ay pagpunta sa magdusa ng segmentation fault. Kaya muli,
ay siguraduhin na hindi lumalampas na sa hangganan ng iyong array, lalo argv,
ibinigay nito mataas na antas ng kahalagahan sa iyong mga programa.
>> Ako Doug Lloyd.
Ito ay CS50.