>> [MUSIC nagpe-play]
>> David J. MALAN: Lahat ng karapatan.
Ito ay CS50 at ito ay ang simula ng Linggo 2.
At makikita mo isipin na sa paglipas ng sa nakalipas na dalawang linggo,
Na-nagpapakilala kami ng computer agham at, sa turn, programming.
>> At sinimulan namin ang kuwento sa pamamagitan ng paraan ng Scratch, na graphical wika
mula sa MIT'S Media Lab.
At pagkatapos ay pinaka-kamakailan lamang, noong nakaraang linggo, ginawa namin
ipakilala ang isang higher-- isang mas mababang antas ng wika na kilala
bilang C, isang bagay na ay pulos sa texto.
At, sa katunayan, huling oras namin ginalugad sa loob ng konteksto
isang bilang ng mga concepts.
>> Na ito, pagpapabalik, ay ang napaka unang programa namin ay tumingin sa.
At ang program na ito, medyo simple, Kopya out, "hello, world."
Ngunit mayroong kaya magkano tila magic nangyayari.
Mayroong ito #include may mga anggulo bracket.
Mayroong int.
Mayroong (walang laman).
Mayroong panaklong, kulot tirante, semi-colons, at kaya marami pang iba.
>> At ito, isipin ang na ipinakilala namin Scratch
kaya na namin maaaring, sa isip, tingnan ang nakaraang na syntax, ang bagay-bagay na talagang hindi
lahat na intellectually kawili-wiling ngunit maaga
ay, walang pasubali, isang bit mapaglalang upang wrap ang iyong isip sa paligid.
At, sa katunayan, ang isa sa mga pinaka-karaniwang bagay nang maaga sa isang programming class,
lalo na para sa mga mas mababa kumportable, ay upang makakuha ng bigo sa pamamagitan
at tripped up sa pamamagitan ng ilang sintaktik error, hindi sa banggitin lohikal na mga error.
At kaya sa gitna ng aming mga layunin ngayon, talaga, ay
ay upang magbigay ng kasangkapan sa iyo ng ilang problema-tuos pamamaraan para sa kung paano
upang mas mahusay na malutas ang mga problema sa kanilang sarili sa anyo ng pag-debug.
At makikita mo isipin, masyadong, na ang kapaligiran na ipinakilala namin
huling beses ay tinatawag na CS50 IDE.
Ito ang web-based software na ay nagbibigay-daan sa iyo na programa sa ulap,
kaya na magsalita, habang pinapanatili ang lahat ng iyong file ng sama-sama, pati na muli namin ay ngayon.
At isipin na kami revisited mga paksang ito dito,
kasama ng mga ito pag-andar, at mga loop, at variable, at Boolean expression,
at kundisyon.
At talagang isang ilang higit pang mga na kami isinalin mula sa mundo ng Scratch
sa mundo ng C.
>> Ngunit ang pangunahing gusali bloke, kaya na magsalita,
ay talagang pa rin ang parehong noong nakaraang linggo.
Sa katunayan, namin talagang lamang nagkaroon ng isang iba't ibang mga puzzle piraso, kung ikaw ay.
Sa halip na na purple i-save ang block, namin sa halip
ay printf, na kung saan ay ang function na ito sa C na
daan sa iyo upang i-print ang isang bagay at format na ito sa screen.
ipinakilala namin ang CS50 Library, kung saan mo
kung ngayon sa iyong pagtatapon get_char, at get_int, at get_string,
at ng ilang mga iba pang mga function bilang well, sa pamamagitan ng na maaari kang makakuha ng input
mula sa sariling keyboard ng gumagamit.
At ating sinakop ang din ng isang pagtingin sa mga bagay-bagay tulad these- bool, at pansamantalang trabaho,
at i-double, float, int, long_long string.
At mayroong kahit iba pang mga uri ng data sa C.
>> Sa ibang salita, kapag ipinapahayag mo isang variable sa tindahan ng ilang mga halaga,
o kapag ikaw ipatupad ang isang function na nagbabalik ilang mga halaga,
maaari mong tukuyin kung ano ang uri ng halaga na ay.
Ito ba ay isang string, tulad ng isang pagkakasunod-sunod ng mga character?
Ito ba ay isang numero, tulad ng isang integer?
Ito ba ay isang lumulutang na tuldok halaga, o ang gusto?
Kaya sa C, hindi katulad Scratch, talaga naming nagsimula upang tukuyin kung anong uri ng data
kami ay bumabalik o paggamit.
>> Ngunit, siyempre, din namin ang bumangga sa ilang mga pangunahing mga limitasyon ng computing.
At sa partikular, wikang ito C, pagpapabalik
na kinuha namin ng isang pagtingin sa integer overflow, ang katotohanan
na kung mayroon ka lamang ng takda na halaga ng memory
o, partikular, ang isang may hangganan bilang ng mga piraso, maaari ka lamang bilangin kaya mataas.
At kaya kami ay tumingin sa halimbawang ito dito kung saan ang isang counter sa isang airplane,,
actually, kung tumatakbo ang haba ng sapat na apaw at magreresulta sa isang software
isang aktwal na pisikal potensyal error.
>> Din namin ay tumingin sa lumulutang punto imprecision, ang katotohanan
na may lamang ng isang hangganan bilang ng mga piraso, kung ito ay 32 o 64,
maaari ka lamang tukuyin kaya maraming mga numero matapos ang isang decimal point, matapos na kung saan mo
simulan upang makakuha ng imprecise.
Kaya halimbawa, isang-katlo sa mundo dito, sa aming mundo ng tao,
alam namin ay lamang ng isang walang-katapusang bilang ng 3s pagkatapos ng decimal point.
Ngunit isang computer ay hindi maaaring kinakailangan kumakatawan sa isang walang-katapusang bilang ng mga numero
kung ikaw lamang payagan ito ng ilang takda na halaga ng impormasyon.
>> Kaya hindi lamang ay magbigay ng kasangkapan ka namin may mas higit na kapangyarihan sa mga tuntunin
ng kung paano mo maaaring ipahayag ang iyong sarili sa isang keyboard sa mga tuntunin ng programming,
din namin limitado ano maaari mong talagang gawin.
At sa katunayan, mga bug at mga pagkakamali Maaari lumabas dahil sa mga uri ng mga isyu.
At sa katunayan, kabilang sa mga paksa ngayon ay pagpunta sa maging paksa tulad ng pag-debug
at talagang naghahanap sa ilalim ng hood sa kung paano mga bagay ay ipinakilala noong nakaraang linggo
ay talagang ipinatupad nang sa gayon ay mas mahusay na sa iyo
maunawaan ang parehong mga kakayahan ng at ang mga limitasyon ng isang wika tulad ng C.
>> At sa katunayan, kami ay alisan ng balat pabalik ang mga layer sa mga pinakamadaling ng istraktura ng data,
isang bagay na tinatawag na isang array, na kung saan Scratch ang mangyayari sa tawag ng isang "listahan."
Ito ay isang maliit na bit naiiba sa na konteksto.
At pagkatapos ay gagamitin din namin ipakilala ang isa sa mga una sa aming mga problema domain na tukoy sa
sa CS50, sa mundo ng cryptography, ang sining ng scrambling
o sa ciphering impormasyon upang na maaari mong ipadala lihim na mensahe
at decode lihim na mensahe pagitan ng dalawang tao, A at B.
>> Kaya bago kami transition sa bagong sanlibutang iyon,
sabihin subukan upang magbigay ng kasangkapan sa iyo ng ilang pamamaraan na kung saan maaari mong alisin
o bawasan hindi bababa sa ilang ng frustrations
na marahil ikaw ay nakaranas loob ng nakaraang linggo nag-iisa.
Sa katunayan, nangunguna sa ikaw ay such-- ilan sa iyong unang problema sa C. At logro ay,
kung ikaw ay tulad ng sa akin, sa unang pagkakataon subukan mong i-type ang isang programa,
kahit na sa tingin mo logically ang programa ay medyo simple,
maaari mong napakahusay pindutin ang isang pader, at ang tagatala ay hindi pagpunta sa tumulong.
Magsagawa o Clang ay hindi pagpunta upang aktwal na gawin ang iyong pag-bid.
>> At kung bakit maaaring na maging?
Well, sabihin tumagal ng isang pagtingin sa, marahil, ang isang simpleng programa.
Ako pagpunta sa sige at i-save ito sa isang file sadyang tinatawag buggy0.c,
dahil alam ko ito sa flawed in advance.
Ngunit hindi ko maaaring mapagtanto na kung ito ay ang unang o ikalawang o ikatlong programa
na talaga ako sa paggawa ng aking sarili.
Kaya ako pagpunta sa sige at type out, int pangunahing (walang bisa).
At pagkatapos ay sa loob ng aking kulot tirante, isang napaka-pamilyar ( "hello, world--
backslash, n ") - at isang semi-colon.
>> Ko na nai-save ang file.
Ngayon ako pagpunta sa pumunta down sa aking terminal na window
at i-type make buggy0, dahil, muli, ang pangalan ng file ngayon ay buggy0.c.
Kaya ko type gumawa buggy0, ang Enter.
>> At, oh, sus, isipin ang mula sa huling oras na walang mga mensahe ng error ay isang magandang bagay.
Kaya walang output ay isang magandang bagay.
Ngunit dito mayroon akong malinaw ilang bilang ng mga pagkakamali.
>> Kaya ang unang linya ng output pagkatapos mag-type gumawa buggy0, pagpapabalik,
ay medyo masyadong masalita output ni Clang.
Sa ilalim ng hood, CS50 IDE ay isinaayos
ang paggamit ng isang buong grupo ng mga mga pagpipilian na may compiler na ito
nang sa gayon ay hindi mo na kailangang mag-isip tungkol sa mga ito.
At na ang lahat na unang linya ang ibig sabihin nito ay nagsisimula sa Clang.
>> Nguni't nang mahayag na, ang mga problema simulan upang gawin ang kanilang hitsura.
Buggy0.c on line 3, karakter 5, mayroong isang malaking, pulang error.
Ano yan?
Kataon lamang deklarasyon ng function library printf may uri int (const magpasinda *,
...) [Werror].
Ibig kong sabihin, ito masyadong mabilis nagiging sobrang arcane.
At tiyak, sa unang tingin, hindi namin gagawin
inaasahan mong maunawaan ang kabuuan ng mensaheng iyon.
At kaya isa sa mga aralin para sa araw na ito ay pagpunta
upang maging upang subukan sa paunawa pattern, o mga katulad na bagay na ito,
sa mga error na maaaring mayroon ka nakatagpo sa nakaraan.
Kaya sabihin manunudyo bukod lamang mga salitang iyon na tumingin pamilyar.
Ang malaki, red error ay malinaw sinasagisag ng isang bagay sa pagiging mali.
>> kataon lamang deklarasyon library function printf.
Kaya kahit na hindi ko lubos na maunawaan kung ano ang kataon lamang deklarasyon ng function library
ibig sabihin nito, ang problema ay tiyak na ay may kinalaman sa printf anumang paraan.
At ang pinagmulan ng na isyu Mayroon itong gawin sa deklarasyon ito.
>> Deklarasyon ng function na ay mentioning ito sa unang pagkakataon.
At ginamit namin ang mga terminolohiya noong nakaraang linggo ng deklarasyon prototype ng isang function, ang
alinman sa isang linya sa itaas ng iyong sariling file o sa isang tinatawag na file header.
At sa kung ano ang file ay sinasabi namin noong nakaraang linggo na printf ay quote,
magpanipi, ipinahayag?
Sa anong file ay ang kanyang prototype?
>> Kaya kung isipin ang mo, ang tunay unang bagay na ako type, halos bawat programa noong time--
at sinasadyang isang sandali ang nakalipas ay nagsimula pag-type myself-- ay ang isang ito here--
hash-- # isama <stio-- para input / output-- dot h At sa katunayan,
kung ako ngayong i-save ang file na ito, pupuntahan ko sige at i-clear ang aking screen,
na maaari mong gawin sa pamamagitan ng pagtype I-clear, o maaari mong pindutin nang matagal ang Control L,
lamang upang i-clear ang iyong terminal window lamang upang puksain ang ilan kalat.
>> Ako pagpunta sa sige at re-type make buggy0, ang Enter.
At voila, ako pa rin na long utos mula Clang,
ngunit walang mensahe ng error oras na ito.
At sa katunayan, kung gagawin ko ./buggy0, tulad ng huling oras,
kung saan tuldok ang ibig sabihin nito direktoryo, slash lang ibig sabihin nito,
dito ay ang pangalan ng programa at na ang pangalan ng programa ay buggy0,
Ipasok, "hello, world."
>> Ngayon, kung paano na maaaring mayroon ka gleaned solusyon na ito
nang hindi kinakailangang Kinikilala ng maraming mga salita
tulad ng ginawa ko, tiyak, pagkakaroon tapos na ito para sa maraming taon?
Well, nauunawaan ng bawat sa mga unang problema set, ipakilala namin sa inyo na isang command
na ang sariling staff CS50 sinulat tinatawag help50.
At sa katunayan, C ay detalye para ang problema itakda bilang sa kung paano gamitin ito.
>> Ngunit help50 ay mahalagang isang programa na CS50 kawani
wrote na ay nagbibigay-daan sa iyo upang patakbuhin isang utos o magpatakbo ng isang programa,
at kung hindi mo maintindihan nito output, upang pumasa ang kanyang output sa help50,
at sa puntong ang software na ang mga kawani ng kurso ay nagsulat
Titingnan output ng iyong programa sa bawat linya nito, karakter sa pamamagitan ng karakter.
At kung namin, ang staff, kilalanin ang error na mensahe na iyong nararanasan,
kami ay subukan upang mungkahiin sa iyo ng ilang retorika katanungan, na may ilang mga payo,
marami tulad ng isang TF o isang CA o ang aking sarili Gusto ko nang personal sa oras ng opisina.
>> Kaya tumingin sa help50 kung hindi mo gusto kinakailangang makilala ang isang problema.
Ngunit huwag umaasa sa mga ito masyadong maraming bilang isang saklay.
Ay tiyak na subukan upang maunawaan ang kanyang output at pagkatapos ay matuto mula dito
nang sa gayon ay isang beses lamang o dalawang beses gagawin mo kailanman tumakbo help50 para sa isang partikular error
message.
Pagkatapos nito, dapat mong mas mahusay na kagamitan sa iyong sarili
para malaman kung ano ito tunay ay.
>> Tayo'y gawin ang isa sa iba pang dito.
Hayaan akong sige, at sa ibang file kami ay tumawag ito buggy1.c.
At sa file na ito ako pagpunta sa deliberately--
ngunit magpanggap na hindi ko ginagawa maunawaan kung ano ang pagkakamali na ginawa ko.
>> Ako pagpunta sa sige at gawin this-- # isama, dahil na ako
natutunan ang aking aralin mula sa isang sandali ang nakalipas.
Int pangunahing (walang bisa), tulad ng dati.
At pagkatapos ay sa dito ako pagpunta gawin string s - get_string.
At isipin ang mula sa huling beses na paraan na ito, hey, computer,
bigyan ako ng isang variable, tumawag ito s, at gawin ang mga uri ng na variable sa isang string
kaya ang maaari kong mag-imbak ng isa o higit pang mga salita sa loob nito.
>> At pagkatapos ay sa kanang-kamay bahagi ng katumbas sign
ay get_string, na isang function sa CS50 Library
na ginagawa eksakto na.
Ito ay makakakuha ng isang function at pagkatapos ay kamay ito mula sa karapatan sa kaliwa.
Kaya ito katumbas sign ay hindi nangangahulugan "Ay katumbas ng" bilang maaari naming tingin sa math.
Ito ay nangangahulugan na assignment mula sa karapatan sa kaliwa.
Kaya ito ay nangangahulugan, gawin ang mga string mula sa user at mag-imbak ito sa loob ng s.
>> Ngayon sabihin gamitin ito.
Hayaan akong magpatuloy ngayon at bilang isang pangalawang line, hayaan mo akong magpatuloy at sabihin "hello" -
hindi "mundo," ngunit "hello,% s-- na kung saan ay ang aming placeholder, kuwit s,
na kung saan ay ang aming variable, at pagkatapos ay isang semi-colon.
Kaya kung ako ay hindi magtaas ng masyadong maraming dito, ito ay ganito ang hitsura tamang code.
>> At ang aking instincts ngayon ay upang ipunin ito.
Ang file ay tinatawag buggy1.c.
Kaya ako pagpunta sa gawin ang make buggy1, ang Enter.
At darn-ito, kung diyan ay hindi kahit higit pang mga error kaysa sa bago.
Ibig kong sabihin, mayroon pa mga mensahe ng error ay ito
mukhang kaysa sa aktwal na mga linya sa programang ito.
>> Ngunit ang takeaway dito ay, kahit na ikaw ay bumagsak
na may dalawa o tatlo o apat na higit pang mga mensahe ng error,
focus ay palaging sa napaka una sa mga mensahe.
Sa pagtingin sa mga top-pinaka-isa, scroll back up bilang kailangan maging.
Kaya dito ako nag-type make buggy1.
Narito na Clang output tulad ng inaasahan.
>> At narito ang unang red error.
Ang paggamit ng hindi nagbigay-alam identifier string, ang ibig sabihin ko karaniwang gawin?
Kaya pamantayan sa ay talagang isang bagay sino pa ang paririto.
Ito ay tumutukoy sa ng gumagamit keyboard, mahalagang.
>> Ngunit hindi iyon ang ibig sabihin ko.
sinadya ko string, at sinadya ko get_string.
Kaya kung ano ay ito na ako nakalimutan na gawin oras na ito?
Ano ang kulang oras na ito?
Mayroon akong aking #include, kaya wala akong access sa printf.
>> Ngunit ano ang gagawin ko walang access sa isa lamang?
Well, tulad ng huling oras, Kailangan ko bang sabihin sa compiler
Kumalatong kung ano ang mga function ay.
Get_string ay hindi dumating sa C. At sa partikular, ito
ay hindi dumating sa header file,.
Ito sa halip ay dumating sa isang bagay na ang mga kawani sinulat ni,
kung saan ay isang iba't ibang mga file pangalanan ngunit aptly pinangalanan.
>> Kaya sa pamamagitan lamang ng pagdaragdag na ang isang linya ng code-- pagpapabalik mula sa huling beses
na kapag Clang ay tumatakbo, ito ay pagpunta upang tumingin sa aking code sa itaas sa ibaba,
kaliwa papuntang kanan.
Ito ay pagpunta sa mapansin, oh, gusto mo.
Payaunin mo ako at makita na, kung saan man ito ay sa server,
kopyahin at i-paste ito, mahalagang, sa itaas ng iyong sariling mga file
kaya na sa puntong ito sa kuwento, line 1, ang ilang bahagi ng programa
maaari, sa katunayan, gamitin ang alinman sa mga pag-andar sa ganyang bagay, kasama ng mga ito get_string.
Kaya ako pagpunta sa huwag pansinin ang natitirang bahagi ng mga error,
dahil ako, sa katunayan, maghinala na lamang ang unang isa talagang mattered.
At ako pagpunta sa sige at gawin uli, pagkatapos i-save ang aking mga file gumawa buggy1.
At voila, ito ay gumagana.
At kung gagawin ko ./buggy1 at i-type sa, Halimbawa, Zamyla, ako ngayon ay makakakuha ng hello,
Zamyla, sa halip ng kumusta, mundo.
>> Lahat tama.
Kaya ang takeaways dito pagkatapos ay sa, isa, subukan upang mamulot hanggang kaya mo
mula sa mga mensahe ng error nag-iisa, naghahanap ang ilan sa mga makikilala salita.
Maliban sa na, gamitin help50 per ang problema set pagtutukoy.
Ngunit paghahadlang na, masyadong, laging tumingin sa tuktok error lamang, hindi bababa sa
una, upang makita kung ano ang impormasyon maaaring ito ang tunay na nagbubunga.
Ngunit ito ay lumiliko out doon ni kahit na higit pa andar na binuo
sa CS50 Library upang matulungan kayong maaga sa sa semestre
at sa maagang bahagi sa programming malaman kung ano ang pagpunta mali.
Kaya sabihin gawin ang isa pang halimbawa dito.
Ako pagpunta sa tumawag ito buggy2, kung saan, muli, ay pagpunta sa ay flawed out
ng pintuang-bayan, sa pamamagitan ng disenyo.
>> At ako pagpunta sa sige at gawin # include.
At pagkatapos ay ako pagpunta sa gawin int pangunahing (walang bisa).
At pagkatapos ay ako pagpunta sa gawin ang isang para sa loop.
Para sa (int i _ 0.
i ay mas mababa sa o patas sa 10.
i ++, at pagkatapos ay sa kulot tirante, pupuntahan ko upang i-print out lamang ng isang hashtag simbolo dito
at ng isang bagong linya ng character.
>> Kaya ang aking mga layunin sa mga ito programa ay lubos na lamang
upang umulit 10 beses at sa bawat pag-ulit
ng na loop sa bawat oras sa pamamagitan ng mga cycle,
print ng hashtag, isang hashtag, isang hashtag.
Isa sa bawat linya dahil ako magkaroon ng bagong linya doon.
At isipin na ang para sa loop, per huling week--
at makakakuha ka ng higit pang pamilyar sa syntax
pamamagitan ng paggamit nito sa pagsasanay bago long-- ito ay nagbibigay sa akin
isang variable na tinatawag i at nagtatakda ito sa 0.
>> Ito palugit i on bawat pag-ulit sa pamamagitan ng 1.
Kaya ako papunta sa 1 hanggang 2 sa 3.
At pagkatapos ay ang kundisyong ito sa gitna sa pagitan ng semi-colons
makakakuha naka-check sa bawat pag-ulit upang gumawa sigurado na kami ay pa rin sa loob ng range.
Kaya gusto kong umulit 10 beses, kaya ko may uri ng napaka intuitively lamang
ilagay ang 10 bilang aking itaas na nakatali doon.
>> At gayon pa man, kapag tumakbo ko ito, pagkatapos ipon ito na may make buggy2--
at ito ay sumulat ng libro OK.
Kaya hindi ko magkaroon ng isang syntax error oras na ito.
Hayaan akong magpatuloy ngayon at patakbuhin buggy2, ang Enter.
At ngayon mag-scroll up.
At hayaan mo akong dagdagan ang laki ng window.
>> Mukhang ako na magkaroon ng 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11.
Kaya mayroong 11 hashtags, kahit na Ako malinaw ilagay ang 10 sa loob ng loop na ito.
Ngayon, ang ilan sa inyo ay maaaring makita kaagad kung ano ang error ay dahil, sa katunayan, ito
ay hindi isang tunay matigas error na gumawa.
Ngunit ito ay napaka-karaniwang ginawa napaka maaga.
>> Ano ang gusto kong ituro, bagaman, ay, paano maaari ko tayahin ito lumitaw?
Well, ito ay lumiliko out na ang CS50 Library pagdating
na may hindi lamang get_string at get_int at get_float at iba pang mga pag-andar.
Mayroon din itong isang espesyal na function tinatawag eprintf, o, error printf.
At ito ay umiiral lamang upang gumawa ng ito ng isang maliit na bit mas madali para sa iyo
kapag debugging ang iyong code sa makatarungan i-print ang isang mensahe ng error sa screen
at alam kung saan ito nanggaling.
>> Kaya halimbawa, isang bagay maaari ko gawin dito sa function na ito ay this--
eprintf, at pagkatapos ay ako pagpunta sa sige at sabihin i ay% ngayong i, backslash, n.
At ako pagpunta sa plug sa ang halaga ng i.
At hanggang tuktok, dahil ito ay nasa CS50 Library,
Ako pagpunta sa sige at isama
kaya wala akong access sa function na ito.
Ngunit sabihin isaalang-alang kung ano ang linya 9 ay dapat na maging paggawa.
Ako pagpunta sa tanggalin ang huli.
Ito ay walang kinalaman sa aking overarching layunin.
Ngunit eprintf, error printf, ay lamang sinadya magbigay sa akin ang ilang diagnostic impormasyon.
Kapag tumakbo ako ang aking mga programa, gusto kong makita ito sa screen pansamantalang
pati na rin lamang upang maunawaan ano ang nangyayari.
>> At, sa katunayan, sa bawat pag-ulit dito ng linya 9
Gusto kong makita, kung ano ay ang halaga ng i?
Ano ang halaga ng i?
At, sana, ako dapat lamang na mensahe, din, 10 beses.
>> Kaya hayaan mo akong magpatuloy at recompile ang aking programa,
bilang kailangan kong gawin anumang oras gumawa ako ng isang pagbabago. ./buggy2.
At now-- OK.
May isang pulutong ng mas maraming nangyayari.
Kaya hayaan mo akong mag-scroll pataas sa isang mas mas malaking window.
>> At makikita mo na ang bawat isa ang hashtags ay pa rin sa pag-print.
Ngunit sa pagitan ng bawat isa sa kanila ay ngayon na ito diagnostic output format tulad ng sumusunod.
Ang pangalan ng aking programa dito ay buggy2.
Ang pangalan ng file ay buggy2.c.
Ang linya ng numero mula sa kung saan ito ay naka-print ay linya 9.
At pagkatapos ay sa kanan ng iyon ay ang error na mensahe na ako umaasa.
>> At kung ano ang magaling tungkol dito ay na ngayon ay hindi ko na kailangang palaging bilangin
sa aking ulo kung ano ang aking mga programa ay paggawa.
Maaari ko bang makita kung papaanong sa mga unang pag-ulit i ay 0,
pagkatapos ay 1, pagkatapos 2, pagkatapos ay 3, pagkatapos ay 4, pagkatapos ay 5, pagkatapos ay 6, at pagkatapos ay 7, pagkatapos ay 8, at pagkatapos ay 9 at pagkatapos,
10.
Kaya maghintay ng isang minuto.
Anong nangyayari dito?
Mukhang ako pa rin na pagbibilang tulad ng nilayon ng hanggang sa 10.
>> Ngunit saan ako magsisimula?
0, 1, 2, 3, 4, 5, 6, 7, 8, 9 10.
Kaya 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10-- ika-11 daliri
ay nagpapakilala ng ang problema.
Mukhang ako na binibilang hindi tama sa aking loop.
Sa halip na pumunta 10 iterations, Ako simula sa 0,
Ako nagtatapos sa at sa pamamagitan ng 10.
Ngunit dahil, tulad ng isang computer, Ako simula ng pagbilang sa 0,
ang dapat kong maging pagbibilang up sa, ngunit hindi sa pamamagitan ng, 10.
>> At sa gayon ang pag-aayos, Ako sa wakas natanto dito, ay isa sa dalawang bagay.
kaya kong napaka-simple sabihin bilang ng hanggang sa mas mababa sa 10.
Kaya 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, na kung saan ay, sa katunayan, tama,
kahit na ito tunog ng kaunti mali.
O maaari kong gawin mas mababa o katumbas hanggang 9, kaya hangga't sisimulan ko sa 0.
O kung talagang hindi gusto na, ikaw maaaring bilangin up sa pamamagitan ng 10 ngunit magsimula sa 1.
Ngunit muli, ito lamang ay hindi na pangkaraniwan.
Sa programming-- albeit hindi kaya magkano sa Scratch--
ngunit sa programming in C at iba pang mga wika,
tulad ng JavaScript at Python at iba pa, ito ay
lamang napaka-pangkaraniwan para aming mga talakayan ng binary
sa makatarungan simulan ang pagbibilang sa pinakamababang bilang maaari mong, na kung saan ay 0.
Lahat tama.
Kaya na ang dahilan eprintf.
At muli, ngayon na ko na may korte out ang aking problema, at ako pagpunta sa bumalik sa 0
sa pamamagitan ng mas mababa sa 10, ako pagpunta upang pumunta sa at tanggalin eprintf.
>> Hindi ito dapat maging doon kapag ako barko ang aking code o isusumite ang aking code
o ipakita ito sa ibang tao.
Ito ay talagang lamang nilalayong na gagamitin pansamantala.
Datapuwa't sinusulatan ko naayos na ito partikular na problema pati na rin.
>> Well, sabihin gawin ang isa pang halimbawa dito na pupuntahan ko upang gumawa ng tulad ng sumusunod.
Ako pagpunta sa sige at # isama. $ 50
At ako pagpunta sa sige at # include.
>> At ako pagpunta upang i-save ang file na ito bilang buggy3.c.
At ako pagpunta sa sige at ipinapahayag int pangunahing (walang bisa).
At pagkatapos ay sa loob ng doon Ako pagpunta sa gawin int i _ -
Gusto kong ipatupad ang isang programa may get_negative_int.
Ito ay hindi isang function na ay umiiral pa.
Kaya kami ay pagpunta upang ipatupad ito sa loob lamang ng ilang sandali.
Ngunit kami ay pagpunta upang makita kung bakit ito ay maraming surot sa unang pass.
At sa sandaling nakuha ko isang int mula sa user,
Lamang ako ng pagpunta upang i-print% i ay isang negatibong integer, backslash, n, kuwit, i.
Sa ibang salita, ang lahat ko gusto ang program na ito upang gawin
ay makakuha ng isang negatibong int mula gumagamit at pagkatapos i-print out
na tulad at tulad ay isang negatibong int.
>> Ngayon ay kailangan ko upang ipatupad ito function.
Kaya sa ibang pagkakataon sa aking file, Pupunta ako upang pumunta magpatuloy at magpahayag ng isang function na tinatawag na
get_negative_int (walang laman) - at kami bumalik sa kung ano ang ibig muli na linya
sa isang moment-- int n; do-- do ang following-- printf n ay :.
At pagkatapos ay ako pagpunta sa gawin n - get_int, at gawin ito habang n ay mas malaki kaysa sa 0.
At pagkatapos ay bumalik n ;.
>> Kaya mayroong maraming nagaganap sa ito ngunit wala sa kung saan kami ay hindi
tumingin sa nakaraang linggo, hindi bababa sa madaling sabi.
Kaya on line 10 dito na ipinahayag ko ang isang function na tinatawag na get_negative_int,
at inilagay ko (walang laman), sa panaklong, ang dahilan sa pagiging na ito
ay hindi kumuha ng isang input.
hindi ako makapasa kahit ano sa ito function.
Tingin lang ako sa pagkuha ng isang bagay pabalik mula dito.
>> At kung ano ako umaasa na makabalik ay isang integer.
Walang uri ng data sa C tinatawag negative_int.
Lamang ito int, kaya ito ay pagpunta upang maging sa amin upang matiyak na
na ang halaga na talagang bumalik ay hindi lamang isang int
ngunit ding negatibo.
>> On line 12 ako deklarasyon ng variable tinatawag n at ginagawa itong mga ganitong uri ng int.
At pagkatapos ay sa linya 13 sa pamamagitan ng 18 ako paggawa ng isang bagay habang ang isang bagay ay totoo.
Pupunta ako ng maaga at pag-print n ay, colon, at pagkatapos ng isang space,
tulad ng isang prompt para sa user.
>> pagkatapos ay ako pagtawag get_int at pag-iimbak nito tinaguriang halaga return
sa na variable n.
Ngunit ako pagpunta sa panatilihin ang paggawa ito habang n ay mas malaki kaysa sa 0.
Sa ibang salita, kung ang gumagamit ay nagbibigay sa akin ng isang int at numero na ay mas malaki kaysa sa 0,
ergo, positibo, ako pagpunta sa lamang panatilihin reprompting user,
panatilihin reprompting, sa pamamagitan ng pagpilit sa kanila na makipagtulungan at bigyan ako ng isang negatibong int.
>> At sa sandaling n ay talagang negative-- ipagpalagay ang user ay sa wakas uri -50,
at pagkatapos na ito habang loop ay hindi na totoo dahil -50 ay hindi mas malaki kaysa sa 0.
Kaya namin magsimula ng na loop logically at bumalik n.
>> Ngunit mayroong isa pang bagay na kailangan kong gawin.
At maaari ko lang gawin ito sa pamamagitan ng pagkopya at pag-paste
isang linya ng code sa tuktok ng file.
Kailangan ko upang magturo Clang, o pangako na kumalatong,
explicitly na ibig ko, sa katunayan, pumunta at ipatupad
ang function na ito get_negative_int.
Ito ay maaari lamang maging mas mababa sa file.
Muli, tandaan na Clang bumabasa bagay sa itaas sa ibaba,
kaliwa papunta sa kanan, kaya hindi ka maaaring tumawag sa isang function kung Clang
ay hindi alam kung ito ay pagpunta sa umiiral.
>> Ngayon, sa kasamaang-palad, ang program na ito, tulad ng ilan sa iyo ay maaaring napansin,
ay isa nang maraming surot.
Hayaan akong sige at gumawa buggy3.
Ito compiles, kaya ang aking mga problema ngayon ay hindi isang syntax error, tulad ng isang error tekstuwal,
tunay na ito ay pagpunta sa maging isang lohikal na error na ko na sadyang
ginawa bilang isang pagkakataon upang magbasa-basa sa kung ano ang nangyayari sa.
>> Ako pagpunta sa sige ngayon at patakbuhin buggy3.
At ako pagpunta sa pumunta maaga at hindi makikipagtulungan.
Pupunta ako upang bigyan ito ng number 1.
Hindi na ito ay gusto ito, kaya ito ay pagdikta sa akin muli.
>> Paano ang tungkol sa 2?
3?
50?
Wala sa mga ay nagtatrabaho.
Paano ang tungkol sa -50?
At ang programa tila sa trabaho.
>> Hayaan akong subukan ito nang isang beses higit pa.
Hayaan akong subukan -1, tila sa trabaho.
Hayaan akong subukan -2, tila sa trabaho.
Hayaan akong subukan 0.
Huh, na hindi tama.
Ngayon, kami ay pagiging isang maliit na pilosopo dito.
Ngunit ito ay, sa katunayan, ang kaso na 0 ay hindi positibo o negatibo.
At kaya ang katunayan na ang aking programa ay sinasabi na 0 ay isang negatibong integer,
iyan ay hindi technically tama.
>> Ngayon, kung bakit ito ay ginagawa ito?
Well, maaaring ito ay kitang-kita.
At, sa katunayan, ang programa ay sinadya upang maging medyo simple
kaya kami ay may isang bagay upang galugarin.
>> Ngunit sabihin ipakilala ang isang ikatlong debugging diskarteng dito na tinatawag debug50.
Kaya ito ay isang program na lamang na nilikha namin
sa taong ito na tinatawag debug50 na magpapahintulot sa inyo
gamitin kung ano ang tinatawag na isang built-in graphical debugger sa CS50 IDE.
At isang debugger ay lamang ng isang programa na sa pangkalahatan ay nagbibigay-daan patakbuhin mo ang iyong programa
ngunit hakbang-hakbang sa pamamagitan ng hakbang, linya sa pamamagitan ng linya sa pamamagitan ng linya, pag-pause, poking
sa paligid, ang pagtingin sa mga variable sa gayon ay ang programa ay hindi lamang pumutok nakaraan mo
at mabilis na i-print ang isang bagay o hindi i-print ang isang bagay.
Ito ay nagbibigay sa iyo ng pagkakataon, sa human speed, upang makipag-ugnayan sa mga ito.
>> At upang gawin ito, ikaw lamang gawin ang mga sumusunod.
Pagkatapos ipon ng iyong code, na kung saan ko na ginawa, buggy3,
pumunta ka magpatuloy at patakbuhin debug50 ./buggy.
So magkano ang gusto help50 ay nagpapatakbo ka help50 at pagkatapos ay ang command,
debug50 ay nagpapatakbo ka debug50 at pagkatapos ay ang pangalan ng command.
>> Ngayon panoorin kung ano ang mangyayari sa aking screen, sa kanang gilid sa partikular na.
Kapag ako pindutin Run, ang lahat ng mga biglaang panel na ito kanang
bubukas up sa screen.
At mayroong maraming nagaganap on sa unang tingin.
Ngunit may ay hindi masyadong gaanong mag-alala tungkol sa pa.
>> Ito ay nagpapakita ng sa akin ang lahat na nangyayari sa loob ng aking mga programa
ngayon at sa pamamagitan ng mga buttons up tuktok ay pagkatapos
nagpapahintulot sa akin sa hakbang sa pamamagitan ng aking code huli hakbang-hakbang sa pamamagitan ng hakbang.
Ngunit hindi lamang pa.
Pansinin kung ano ang mangyayari.
Sa aking terminal na window Ako na senyasan para sa n.
At ako pagpunta sa sige at makipagtulungan oras na ito at i-type -1.
At kahit na isang maliit cryptically, -1 ay isang negatibong integer, tulad ng inaasahan.
>> At pagkatapos ang sumunod pang lumabas na may status 0 GDBserver exiting.
GDB, GNU Debugger, ay ang pangalan ng ang kalakip na software
na nagpapatupad ito debugger.
Ngunit lahat ng ito talaga ay nangangahulugan, ang debugger umalis dahil ang aking programa quit
at lahat ay mabuti.
Kung gusto kong tunay debug aking mga programa, Kailangan ko bang sabihin sa preemptively debug50,
kung saan ang gusto ko upang simulan ang tuntong sa pamamagitan ng aking code?
>> At marahil ang pinakamadaling paraan upang gawin iyon ay ang mga sumusunod.
Kung ako mag-hover sa kanal ng aking editor dito,
kaya talagang lamang sa sidebar dito, sa kaliwa ng linya na numero,
abisuhan na kung ako i-click lamang isang beses, ko bang ilagay ang isang maliit na pulang tuldok.
At na maliit na pulang tuldok, tulad ng isang stop sign, ibig sabihin nito, hey,
debug50, i-pause pagpapatupad ng aking code doon kapag nagpatakbo ako ng programang ito.
>> Kaya sabihin gawin iyon.
Hayaan akong sige at patakbuhin ang aking programa muli gamit debug50 ./buggy3, ang Enter.
At ngayon, pansinin, isang bagay iba't ibang ang nangyari.
Hindi ko na senyasan pa sa aking terminal na window
para sa anumang, sapagka't wala akong nakuha doon pa sa aking programa.
Pansinin na sa linya 8 na ngayon ay naka-highlight,
at mayroong isang maliit na arrow sa kaliwang sinasabi, ikaw ay naka-pause dito.
Ang linya ng code, linya 8, ay hindi pa naisakatuparan.
>> At kung ano ang malaman, kung tiningnan ko sa paglipas dito sa kanang gilid,
mapapansin na i ay isang lokal na variable, mga lokal na sa kamalayan
na ito ay sa loob ng kasalukuyang function.
At ang halaga nito, tila sa pamamagitan ng default, at uri ng conveniently, ay 0.
Ngunit hindi ko type 0.
Iyon lamang ang mangyayari sa kanyang default na halaga sa sandaling ito.
>> Kaya hayaan mo akong magpatuloy at gawin ito ngayon.
Hayaan akong sige at sa kanang tuktok dito, ako
pagpunta sa sige at i-click ang unang icon na
nangangahulugan hakbang sa paglipas ng na nangangahulugan huwag laktawan ito ngunit tumawid ito linya ng code,
Isinasagawa ito sa kahabaan ng paraan.
>> At ngayon, mapansin, aking prompt ay may lamang ay nagbago.
Bakit na?
Sinabi ko debug50, patakbuhin ang linya ng code.
Ano ang ibig ito linya ng code?
Prompt sa akin isang int.
OK.
Hayaan akong makipagtulungan.
Hayaan akong magpatuloy ngayon at i-type -1, ang Enter.
At ngayon mapansin kung ano ang nagbago.
Sa kanang gilid, aking mga lokal na variable i
ay ipinahiwatig bilang -1 ngayon.
At ito ay pa rin ng uri int.
>> At pansinin, masyadong, ang aking mga tinatawag na tumawag stack, kung saan ay ko i-pause?
Kami makipag-usap ang nalalaman tungkol sa ito sa hinaharap.
Ngunit ang tawag stack lamang tumutukoy sa kung ano function ay kasalukuyang nasa paggalaw.
Sa ngayon ito lang ang main.
At ngayon ang tanging lokal na variable ay i may halagang 1.
>> At kapag ako sa wakas hakbang sa ibabaw linyang ito dito, sa na parehong icon sa kanang tuktok,
-1 Ay isang negatibong integer.
Ngayon ito ay pag-pause sa paglipas na kulot suhay.
ni ipaalam ito gawin nito bagay Hayaan.
hakbang ko sa paglipas na linya, at voila.
>> Kaya hindi lahat na masyado nakapapaliwanag pa,
ngunit ito ay hayaan mo akong i-pause at sa tingin sa pamamagitan ng logically
kung ano ang programa na ito ay ginagawa.
Ngunit iyon ay hindi ang maling kaso.
Natin gawin ito muli bilang mga sumusunod Hayaan.
>> Ako pagpunta sa iwan na breakpoint on line 8 gamit ang pulang tuldok.
Pupunta ako sa muling palabas ng pelikula debug50.
ito ay awtomatikong naka-pause dito.
Ngunit oras na ito, sa halip na stepping sa paglipas ng linya na ito,
hayaan mo akong tunay na pumunta sa loob ng get_negative_int at malaman kung,
kung bakit ito ay tumatanggap ng 0 bilang isang wastong sagot?
>> Kaya sa halip ng pag-click Hakbang Over.
Ako pagpunta sa sige at i-click Hakbang Into.
At mapansin na ang mga linya 8 na ngayon naka-highlight ngayon biglang
nagiging line 17.
>> Ngayon, ito ay hindi na ang debugger ay nilaktawan linya 14 at 15 at 16.
Lamang Ito ay may walang upang ipakita sa iyo doon.
Yaong ay lamang deklarasyon variable, at pagkatapos ay doon ay ang salitang Gawin
at pagkatapos ay isang bukas kulot suhay.
Ang tanging functional linya na juicy nga bang talaga ito ng isa dito, 17.
At na kung saan hindi namin awtomatikong naka-pause.
>> Kaya printf ( "n.is:") ;, kaya na ay hindi pa nangyari.
Kaya sabihin sige at i-click Tumawid.
Ngayon ang aking prompt, sa katunayan, pinalitan sa ( "n ay:").
Ngayon get_int, hindi ako pagpunta sa pag-abala stepping sa,
dahil na function ay ginawa sa pamamagitan ng CS50 sa Library.
Ito ay siguro tama.
>> Kaya ako pagpunta sa sige at uri ng makipagtulungan pamamagitan ng pagbibigay ito
isang int, ngunit hindi isang negatibong int.
Kaya hayaan mo akong sige at pindutin 0.
At ngayon kung ano ang mangyayari dito kapag nakakuha ako pababa sa line 21?
hindi ko na iterated muli.
hindi ko tila na maging mapagmataas sa na loop.
Sa ibang salita, ito dilaw bar ay hindi panatilihin ang pagpunta sa paligid,
at sa paligid, at sa paligid.
>> Ngayon, kung bakit ay na?
Well, n, kung ano ang n ngayon?
Maaari ko bang tingnan ang mga lokal na variable sa debugger.
n ay 0.
O sige, kung ano ang aking kondisyon?
>> 20-- line 20 ay, well, 0 ay mas malaki kaysa sa 0.
Hindi iyan totoo.
0 ay hindi mas malaki kaysa sa 0.
At kaya I Nasira out ng mga ito.
>> At sa gayon ay ang dahilan kung bakit on line 21, kung ako talaga magpatuloy,
Pupunta ako sa bumalik 0, kahit bagaman aking itinakuwil 0
dahil hindi aktwal na pagiging negatibo.
Kaya ngayon, hindi ko talaga kahit aalaga ang tungkol sa debugger.
Got ito, hindi ko na kailangang malaman kung ano pa ang nangyayari.
>> Kaya ako pagpunta sa sige at i-click lamang ang pindutan ng Play,
at ito'y tapusin up.
Ngayon, ako na natanto na ang aking bug ay tila on line 20.
Iyan ang aking logical error.
>> At kaya kung ano ang gusto ko gawin upang baguhin ito?
Kung ang problema ay na hindi ako pansing 0, ito ay lamang ng isang lohikal na error.
At maaari kong sabihin habang n ay mas malaki kaysa sa o katumbas ng 0,
panatilihin pagdikta muli at muli sa user.
>> Kaya, muli, simpleng pagkakamali, marahil kahit halata kapag nakita mo ako
isulat ito lamang ng ilang minuto ang nakalipas.
Ngunit ang takeaway dito ay na sa debug 50,
at sa pag-debug software mas pangkalahatang paraan,
ikaw ay may ito bagong natagpuan kapangyarihan upang maglakad sa pamamagitan ng iyong sariling code, tumingin
sa pamamagitan ng na kanang kamay panel kung ano ang ang iyong mga variable na halaga ay.
Kaya gawin mo hindi kinakailangang kung gamitin ang isang bagay
tulad eprintf mong i-print ang mga halaga.
Maaari mong aktwal na makita ang mga ito visually sa screen.
>> Ngayon, lampas na ito, ito ay nagkakahalaga ng noting na mayroong isa pang pamamaraan na
talagang super pangkaraniwan.
At maaari kang magtaka kung bakit ito maliit guy here ay na-upo sa entablado.
Kaya mayroong mga pamamaraan na ito, sa pangkalahatan kilala bilang goma pato debugging,
na talagang ay lamang ng isang testamento sa ang katunayan
na madalas kapag programmers isinusulat code,
ang mga ito ay hindi kinakailangan nakikipagtulungan sa iba,
o nagtatrabaho sa isang shared kapaligiran.
>> Ang mga ito ay uri ng sa bahay.
Siguro ito ay huli sa gabi.
Sila ay sinusubukan upang figure ang ilang mga bug sa kanilang mga code.
At sila ay lamang ay hindi makita ito.
>> At walang kasama sa kuwarto.
Walang tf.
Walang CA paligid.
Lahat ng kailangan nila sa kanilang mga shelf ay ang maliit na goma ducky.
>> At kaya goma pato debugging ay lamang ang imbitasyong ito
mag-isip ng isang bagay bilang uto bilang na ito bilang isang tunay na nilalang,
at talagang maglakad sa pamamagitan ng iyong code pasalita sa ito bagay na walang buhay.
Kaya, halimbawa, kung ito ay ang aking mga halimbawa here--
at isipin na mas maaga ang problema ay na ito,
kung tatanggalin ko ito unang linya ng code, at pumunta ako magpatuloy at gumawa ng maraming surot 0 muli,
pagpapabalik na ako ay nagkaroon ng mga mga mensahe ng error dito.
Kaya ang ideya dito, walang katotohanan kahit na ako pakiramdam sa sandaling ito ang paggawa nito sa publiko,
ay na error.
>> OK, kaya ang aking problema ay na ko na kataon ipinahayag ng isang function na library.
At na library function ay printf.
Declare-- OK, idedeklara reminds ako ng mga modelo.
>> Ito ay nangangahulugan na kailangan ko upang aktwal na sabihin sa compiler in advance kung ano
ang function kamukha.
Maghintay ng isang minuto.
Hindi ko magkaroon ng standard io.h.
Maraming salamat.
>> Kaya lang ang prosesong ito of-- mo hindi na kailangan upang aktwal na magkaroon ng isang pato.
Ngunit ang ideya na ito ng paglalakad ang iyong sarili sa pamamagitan ng iyong sariling code
upang ikaw kahit na marinig sa iyong sarili, sa gayon ay ikaw
mapagtanto omissions sa iyong sariling remarks, sa pangkalahatan ang mga ideya.
>> At, marahil mas logically, hindi kaya magkano sa na ang isa ngunit ang mas kasangkot
Halimbawa lang namin ginawa sa buggy 3.C, maaari mong maglakad ang iyong sarili sa pamamagitan ng ito
tulad ng sumusunod.
Kaya ang lahat ng karapatan, goma ducky, DDB, kung ikaw ay.
Narito kami ay may sa aking mga pangunahing function, Ako ng pagtawag makakuha ng mga negatibong int.
>> At ako ay getting ang bumalik halaga.
Ako pag-imbak nito sa kaliwang bahagi on line 8 sa isang variable na tinatawag na i.
OK, ngunit maghintay, kung anong ginagawa ni na makakuha na halaga?
Hayaan akong tumingin sa ang mga function sa linya 12.
>> Sa linya 12, mayroon kaming makakuha ng mga negatibong int.
Hindi gumawa ng anumang inputs, ay bumalik sa isang int, OK.
Ipinahahayag ko sa line 14 isang variable n.
Ito ay pagpunta sa tindahan ng isang integer.
Iyan ang gusto ko.
>> Kaya gawin ang mga sumusunod habang n is-- ipaalam undo sa akin kung ano ang ayusin ko na ginawa.
Kaya habang n ay mas malaki kaysa 0, i-print out n ay, OK.
At pagkatapos ay tumawag makakuha int naka-imbak sa n.
At pagkatapos ay i-tsek kung ang n ay 0, n ay not-- may ito ay.
Kaya, muli, hindi mo gusto kailangan ang aktwal na pato.
Ngunit lamang sa paglalakad iyong sarili sa pamamagitan ang iyong code bilang isang intelektuwal na ehersisyo
ay madalas na makakatulong sa iyo mapagtanto kung ano ang nangyayari sa,
bilang laban sa lamang paggawa ng isang bagay tulad nito, nakapako sa screen,
at hindi pakikipag-usap sa iyong sarili sa pamamagitan ng ito, na sa totoo lang ay hindi
halos bilang isang epektibong pamamaraan.
Kaya doon kayo ay may ito, ang isang bilang ng mga iba't-ibang pamamaraan
para sa aktwal na pag-debug ang iyong code at pagkakita ng kakulangan, ang lahat ay
ay dapat na mga tool sa iyong toolkit nang sa gayon ay hindi ka huli sa gabi,
lalo na, gusto mo ng dining halls, o sa oras ng opisina,
banging iyong ulo laban sa mga pader, sinusubukan upang malutas ang ilang mga problema.
Napag-alaman na may mga software tools.
May mga goma pato tools.
At mayroong isang buong tukod ng suportahan naghihintay na bang ipahiram sa isang kamay.
>> Kaya ngayon, ang isang salita sa mga problema sets, at sa kung ano kami ay umaasa sa iyo
makakuha ng out ng mga ito, at kung paano pumunta kami tungkol sa pag-evaluate.
Per syllabus ang kurso na iyon, mga hanay ng problema ni CS50
ay sinusuri sa apat na pangunahing axes, kaya upang speak-- saklaw, kawastuhan, disenyo,
at estilo.
At saklaw lamang ay tumutukoy sa kung magkano ng piraso ka makagat off?
Gaano karami ng isang problema ikaw ay may tried?
Ano ang antas ng pagsisikap ikaw ay may manifested?
>> Kawastuhan ay, ang ginagawa ng programa sa trabaho bilang ito ay dapat na sa bawat CS50 specification
kapag ibinigay mo ang ilang mga inputs o ilang mga outputs babalik?
Design ay ang pinaka-subjective ng mga ito.
At ito ay ang isa na ay gawin ang pinakamahabang upang malaman
at ang pinakamahabang upang magturo, sa sa abot ng ito kahulihan babagsak ito sa,
kung gaano kahusay ang nakasulat ay ang iyong code?
>> Ito ay isang bagay na lamang i-print ang tamang outputs o bumalik sa tamang halaga.
Ngunit ang iyong ginagawa ito bilang mahusay hangga't maaari?
Ginagawa mo ito hatiin at lupigin, o binary
search dahil kakailanganin namin sa lalong madaling panahon makita na ang ginawa namin dalawang linggo nakaraan sa phone book?
Mayroon bang mas mahusay na paraan upang malutas ang problema kaysa kasalukuyan kang magkaroon dito?
Iyan ay isang pagkakataon para sa mas mahusay na disenyo.
>> At pagkatapos ay kung paano style-- pretty ay ang iyong code?
Mapapansin mo na ako ay medyo partikular na ang tungkol indent aking code,
at siguraduhin ang aking mga variable ay may makatuwirang pinangalanan. n,
habang maikli, ay isang mahusay na pangalan para sa isang number, i para sa isang pagbilang integer,
s para sa isang string.
At maaari naming magkaroon ng mas mahabang mga pangalan ng variable estilo.
Style ay lamang kung paano mahusay na ang hitsura ng iyong code?
At kung paano nababasa ito?
>> At sa paglipas ng panahon, kung ano ang iyong TAS at TFs ay gawin sa kurso
ay magbigay sa iyo ng na uri ng ng husay feedback
sa gayon ay makakuha ka ng mas mahusay sa mga iba't-ibang aspeto.
At sa mga tuntunin ng kung paano namin suriin ang bawat isa sa mga axes,
ito ay karaniwang may napakakaunting mga bucket upang ikaw, sa pangkalahatan,
makakuha ng ideya ng kung gaano kahusay ang iyong ginagawa.
At, sa katunayan, kung nakatanggap ka ng isang puntos sa anumang ng mga axes-- kawastuhan, disenyo
at estilo especially-- numerong iyon ay sa pangkalahatan ay sa pagitan ng 1 at 5.
At, literal, kung ikaw ay nakakakuha 3 ni sa simula ng semestre,
ito ay isang napakagandang bagay.
Ito ay nangangahulugan na mayroong pa rin kuwarto para sa pagpapabuti,
kung saan nais mong pag-asa para sa pagkuha ng isang klase para sa unang pagkakataon.
Mayroong sana ilang piraso ng kisame na kung saan ka na naghahangad na pag-abot.
At kaya pagkuha sa 3 ni ang earliest piraso,
kung hindi ilang 2 at 4, ay, sa katunayan, isang magandang bagay.
Ito ay mahusay sa loob ng range, mahusay sa loob ng mga inaasahan.
>> At kung ang iyong isip ay karera, maghintay isang minuto, tatlong out ng limang.
Iyan ay talagang isang 6 out of 10.
Iyan ay 60%.
My God, na ang isang F.
>> Hindi.
Ito ay hindi, sa katunayan, iyon.
Sa halip, ito ay isang pagkakataon upang mapabuti ang sa kabuuan ng semestre.
At kung ikaw ay pagkuha ng ilang mga poors, ang mga ito ay isang pagkakataon
upang samantalahin ng mga oras ng opisina, tiyak na mga seksyon at iba pang mga mapagkukunan.
>> Best ay isang pagkakataon, talaga, upang ipagmalaki kung paano lang malayo na sa iyo
dumating sa kabuuan ng semestre.
Kaya huwag mapagtanto, kung wala sino pa ang paririto, tatlong ay mabuti.
At ito ay nagpapahintulot sa kuwarto para sa paglago sa paglipas ng panahon.
>> Tulad ng sa kung paano ang mga axes ay weighted, realistically ikaw ay
pagpunta sa gumastos ng karamihan ng iyong oras sa pagkuha ng bagay sa trabaho, pabayaan mag-isa ng tama.
At kaya kawastuhan ay may gawi na na may timbang ang pinaka, tulad ng may
ito multiplicative factor ng tatlong.
Design ay din mahalaga, ngunit isang bagay na gawin mo hindi kinakailangang
gumastos ng lahat ng mga oras sa sinusubukan upang makakuha ng mga bagay lamang sa trabaho.
>> At kaya ito ay may timbang ng kaunti pa gaanong.
At pagkatapos ay estilo ay may timbang ang kahit.
Kahit na ito ay hindi mas mababa mahalaga sa panimula,
ito lamang ay, marahil, ang pinakamadaling bagay na gawin karapatan,
paggaya sa halimbawa namin gawin sa lecture at seksyon,
may mga bagay na mabuti yupi, at nagkomento,
at iba pa ay kabilang sa mga pinakamadaling bagay na maaaring gawin at makakuha ng karapatan.
Kaya dahil dito, napagtanto na ang mga ito ay mga punto
na ay medyo madali upang maunawaan.
>> At ngayon ng isang salita sa this-- academic honesty.
Kaya bawat ang kurso syllabus, makikita mo ang
na ang mga kurso ay may lubos ng bit ng wika sa paligid na ito.
At ang course tumatagal ang isyu ng academic honesty lubos seriously.
>> Mayroon kaming ang pagkakaiba, para sa mas mahusay o para sa mas masahol pa,
ng nang maisugo na niya sa bawat taon higit pa mga mag-aaral para sa pagkilos pandisiplina
kaysa sa karamihan ng anumang iba pang mga siyempre, na ako ng kamalayan ng.
Ito ay hindi kinakailangan nagpapakilala ng ang katunayan
na CS mag-aaral, o CS50 mga mag-aaral, ang mga ito anumang mas matapat kaysa sa iyong mga kaklase.
Subalit ang katotohanan na sa ganitong mundo, sa elektronikong paraan, kami lang
mayroon teknolohikal ay nangangahulugan ng pag-detect ito.
>> Ito ay mahalaga sa amin para pagkamakatarungan sa buong klase
na ginagawa namin tiktikan ito, at itataas ang isyu kapag nakita namin ang mga bagay.
At lamang upang pintura ng isang larawan, at talagang upang matulungan ang isang bagay tulad nito lababo in,
ito ang bilang ng mga mag-aaral sa loob ng nakaraang 10 taon
na na-kasangkot sa ilang tulad ng mga isyu ng pang-akademikong katapatan,
na may ilang mga 32 mga mag-aaral mula sa pagkahulog 2015, na
ay upang sabihin na ang gagawin namin gawin ang bagay sineseryoso.
At, sa huli, ang mga numerong ito gumawa ng sulat, pinaka-kamakailan, tungkol sa 3%, 4% o higit pa
ng klase.
>> Kaya para sa sobrang karamihan ng mga mag-aaral ito tila na ang mga linya ay malinaw.
Ngunit huwag panatilihin ito sa bale, lalo na late
sa gabi kapag struggling sa ilang solusyon sa isang hanay problema,
na mekanismo para sa pagkuha ng iyong sarili mas mahusay
support kaysa sa iyo maaaring mag-isip, kahit na sa oras na yaon.
Napag-alaman na kapag natanggap namin student submissions, i-krus namin
ihambing ang bawat submission sa taong ito laban sa bawat submission noong nakaraang taon,
laban sa bawat submission mula sa 2007, at dahil, ang pagtingin sa, pati na rin,
code repositoryo online, discussion forums, mga site ng trabaho.
At banggitin namin ito, talaga, ang lahat para sa kapakanan
ng buong pagsisiwalat, na kung ibang tao ay maaaring mahanap ito online,
tiyak, upang maaari naming kurso.
Ngunit, talaga, ang espiritu ng kurso kahulihan babagsak
sa ito sugnay sa syllabus.
Ito ay tunay na makatarungan, maging makatuwiran.
>> At kung kami ay upang magdagdag ng mga paliwanag sa na na may lamang ng kaunti pang wika,
mapagtanto na ang kakanyahan ng lahat trabaho na isinumite mo sa kursong ito
dapat na ang iyong sarili.
Subalit sa loob na, may mga tiyak na pagkakataon, at encouragement,
at paturo halaga sa na nagiging others-- aking sarili, ang TFs, ang CAs,
ang TAS, at iba pa sa klase, para sa suporta, pabayaan mag-isa mga kaibigan
at roommates na nag-aral CS at programming bago.
At kaya mayroong isang allowance para sa na.
At ang pangkalahatang patakaran ng hinlalaki ay this-- kapag humihingi ng tulong,
maaari mong ipakita ang iyong mga code sa iba, ngunit hindi mo maaaring tingnan ang kanila.
Kaya kahit na ikaw ay nasa oras ng opisina, o sa D hall, o sa iba pang lugar
nagtatrabaho sa ilang mga piraso set, nagtatrabaho sa tabi ng isang kaibigan, na kung saan
ay ganap fine, sa pagtatapos ng araw ang iyong trabaho
dapat sa huli nabibilang sa bawat sa inyo ayon sa pagkakabanggit, at hindi
maging ang ilang mga collaborative pagsisikap, maliban para sa huling proyekto kung saan
ito ay pinapayagan at hinihikayat.
>> Napag-alaman na kung ikaw ay struggling na may isang bagay
at ang iyong kaibigan lamang ang mangyayari upang maging mas mahusay sa ito at pagkatapos ay sa iyo,
o mas mahusay na sa problema na kaysa sa iyo, o isang maliit na higit na malayo ahead kaysa sa iyo,
ito ay ganap na makatwirang upang i-on sa iyong kaibigan at sabihin, hey,
tututol ba kayo naghahanap sa aking code dito, pagtulong sa akin lugar kung ano ang aking mga isyu ay?
At, sana, sa interes ng paturo halaga
na kaibigan ay hindi lamang sabihin, oh, gawin ito, ngunit sa halip,
kung ano ang ikaw nawawala on line 6, o isang bagay tulad na?
Ngunit ang solusyon ay hindi para sa mga kaibigan sa tabi mo
sabihin, oh, well, dito, hayaan mo akong hilahin ito up, at ipakita ang aking mga solusyon sa iyo.
Kaya na ay ang linya.
Ipakita mo ang iyong code sa iba, ngunit hindi mo maaaring
tingnan kanila, napapailalim sa iba pang constraints sa syllabus ng kurso.
>> Kaya huwag tandaan na ito tinaguriang ikinalulungkot sugnay
sa syllabus ng kurso pati na rin, na kung gumawa ka ng ilang mga gawa na
ay hindi makatwirang, ngunit dalhin ito sa ang pansin ng mga ulo ng kurso
loob ng 72 oras, ang mga kurso maaaring magpataw lokal sanction na
ay maaaring magsama ng isang hindi kasiya-siya o magbagsak sa gawaing isinumite.
Ngunit ang kurso ay hindi sumangguni sa mahalaga para sa karagdagang aksyon pandisiplina,
maliban sa mga kaso ng paulit-ulit na gawain.
Sa ibang salita, kung gagawin mo gumawa ng ilang bobo, lalo late night, desisyon
na ang susunod na umaga o dalawang araw mamaya, gisingin mo up at mapagtanto,
kung ano ang pag-iisip ko?
Gawin mo sa CS50 ay may isang outlet para sa pag-aayos ang problema
at pagmamay-ari hanggang sa ito, kaya na namin nakamit mo Halfway at pakikitungo
sa mga ito sa isang bagay na ay parehong pang-edukasyon at mahalaga para sa iyo,
ngunit pampahirap pa rin sa ilang mga paraan.
At ngayon, upang gawin ang mga gilid off, ito.
>> [Video playback]
>> [MUSIC nagpe-play]
>> [END-playback]
David J. MALAN: Lahat ng karapatan, kami ay bumalik.
At ngayon tinitingnan namin ang isa sa mga una sa aming mga domain tunay na mundo
sa CS50, ang sining ng cryptography, ang sining ng pagpapadala at pagtanggap
lihim na mensahe, naka-encrypt mensahe kung ikaw ay,
na maaari lamang deciphered kung mayroon kang ilang mga pangunahing sahog na ang nagpadala ay
din.
Kaya upang mag-udyok ito isasaalang-alang namin isang tumingin sa ang bagay na ito dito,
na kung saan ay isang halimbawa ng isang lihim na decoder ring na
ay maaaring gamitin upang malaman kung kung ano ang isang lihim na mensahe ay tunay.
Sa katunayan, bumalik sa araw sa mababang paaralan,
kung sakaling ipinadala lihim na mensahe sa ilang mga kaibigan o ilang crush sa klase,
maaari mong magkaroon ng isipan ikaw ay pagiging matalino
sa pamamagitan ng sa iyong mga piraso ng papel pagbabago, tulad ng, A to B, at B sa C, at C upang D,
at iba pa.
Ngunit ang tunay na kayo ay pag-encrypt ang iyong impormasyon, kahit
kung ito ay isang maliit na walang halaga, ay hindi na mahirap para sa mga guro upang mapagtanto,
well, kung ikaw lamang baguhin B sa A at C sa B,
aktwal mong malaman kung kung ano ang mensahe ay,
ngunit ikaw ay sa ciphering impormasyon.
>> lamang ang iyong ginagawa ito lamang, na halos tulad Ralphie dito
sa isang sikat na pelikula na nagpe-play medyo marami ad nauseum bawat taglamig.
[Video playback]
-Maging Ito kilala sa lahat na Ralph Parker ay sa pamamagitan nito
hihirangin ng isang miyembro ng Little Orphan Annie Secret Circle
at karapat-dapat sa lahat ng mga honors at mga benepisyo nagaganap dito.
>> -Signed, Little ulila Annie, counter-sign Pierre Andre, sa tinta.
Honors at mga benepisyo, na sa edad na siyam.
>> [Sigaw]
-Halika On.
Sabihin makakuha sa sa mga ito.
Hindi ko kailangan ang lahat na jazz tungkol smugglers at pirates.
>> -Makinig Bukas ng gabi para sa ang concluding pakikipagsapalaran
ng itim na barko ng pirata.
Ngayon, ito ay oras para sa lihim na mensahe ni Annie
para sa iyo miyembro ng Lihim Circle.
Tandaan, mga bata, mga kasapi lamang ng Annie Secret Circle
maaaring mabasa lihim na mensahe ni Annie.
>> Tandaan, Annie ay depende sa iyo.
Itakda ang iyong mga pin sa B2.
Narito ang mensahe.
12, 11--
>> -Ako In, ang aking unang lihim na pulong.
>> -14, 11, 18, 16.
>> -Pierre Ay sa malakas na tinig ngayong gabi.
kaya kong sabihin na sa gabing ito ni mensahe ay talagang mahalaga.
>> -3, 25, na ang isang mensahe mula Annie sarili.
Tandaan, huwag sabihin sa sinuman.
>> -90 Segundo mamaya, ako sa ang tanging kuwarto sa bahay kung saan ang isang batang lalaki ng siyam na
maaaring umupo sa privacy at mabasa.
Aha, B!
Nagpunta ako sa susunod, E.
>> Ang unang salita ay maaaring.
S, ito ay darating madali na ngayon, U, 25--
>> -Oh, Dumating sa, Ralphie, ako gotta go!
>> -I'll Maging karapatan down, Ma!
Gee paghuni!
>> -T, Oh, siguraduhin to-- siguraduhin na kung ano?
Ano Little Orphan Annie sinusubukan mong sabihin?
Maging sigurado sa kung ano?
>> -Ralphie, Andy ay nakuha na pumunta, ikaw ay mangyaring dumating out?
>> -Ang Lahat ng mga karapatan, Ma!
Kukunin ko maging karapatan sa labas!
>> -Ako Ay nakakakuha ng mas malapit na ngayon.
Ang pag-igting ay kahila-hilakbot.
Ano ba iyon?
Ang kapalaran ng mga planeta maaaring mag-hang sa balanse.
>> -Ralphie!
ni Andy gotta go!
>> -I'll Maging karapatan sa labas, para sa umiiyak nang malakas!
>> -Halos Doon, ang aking mga daliri nagsakay, ang aking isip ay isang bakal bitag, bawat titigan vibrated.
Ito ay halos malinaw, yes, yes, yes.
>> -Maging Sigurado na uminom ng iyong Ovaltine.
Ovaltine?
A pangit commercial?
Anak ng isang asong babae.
[END-playback]
David J. MALAN: OK, kaya na noon ay isang napaka-haba paraan
ng pagpapasok cryptography, at din Ovaltine.
Sa katunayan, mula sa gulang advert dito, kung bakit ay Ovaltine kaya magandang?
Ito ay isang puro pagkuha ng hinog barley malta, gatas purong creamy baka,
at espesyal na inihanda cocoa, kasama may natural phosphatides at bitamina.
Ito ay higit pang pinatibay na may karagdagang mga bitamina B at D, yum.
At maaari mo pa ring makakuha ng mga ito, tila, sa Amazon, tulad ng ginawa namin dito.
>> Ngunit ang pag-uudyok dito ay upang ipakilala cryptography, partikular
isang uri ng cryptography kilala bilang sikretong key cryptography.
At bilang ang pangalan nagmumungkahi, ang buong seguridad ng isang lihim na key crypto system,
kung ikaw ay, isang pamamaraan para sa mga lamang scrambling
impormasyon sa pagitan ng dalawang tao, ay na lamang sa nagpadala at lamang ang tatanggap
malaman ng isang lihim na key-- ilang mga halaga, ang ilang mga lihim na parirala, ang ilang mga lihim na numero, na
nagpapahintulot sa mga ito sa parehong encrypt at decrypt impormasyon.
At cryptography, talaga, ay lamang ito mula sa linggo 0.
>> Ito ay isang problema kung saan mayroong inputs, tulad ng mga tunay na mensahe sa Ingles
o kahit anong wika na iyong nais na magpadala sa isang tao sa klase,
o ibang parte ng internet.
Mayroong ilang mga output, kung saan ay pagpunta na maging ang scrambled mensahe na kayo
gusto ang tatanggap sa tumanggap.
At kahit na ang isang tao sa middle natatanggap nito masyadong,
hindi mo nais ang mga ito upang kinakailangang ma-decrypt ito,
dahil sa loob ng mga ito itim na kahon, o algorithm,
ay ilang mga mekanismo, ang ilang mga hakbang-hakbang tagubilin, para sa paglalaan na input
at pag-convert ito sa output, sa sana ay isang ligtas na paraan.
>> At, sa katunayan, may ilang bokabularyo sa mundong ito ang mga sumusunod.
Plain text ay ang salita ng computer siyentipiko gagawin
gamitin upang ilarawan ang input mensahe, gaya ng Inglis
o kahit anong wika ang iyong aktwal na nais na magpadala sa ilang mga iba pang mga tao.
At pagkatapos ay ang ciphertext ay ang pag-aagawan sa enciphered, o naka-encrypt,
bersyon noon.
>> Ngunit mayroong isa pang sahog dito.
May isa iba pang input sa secret key cryptography.
At iyon ay ang susi mismo, na kung saan ay, sa pangkalahatan,
dahil kakailanganin namin makita, ang isang bilang, o sulat, o salita, ano man
ang algorithm na ito ay talagang inaasahan.
>> At paano mo i-decrypt impormasyon?
Paano mo ipaliwanag ito?
Well, ikaw lamang baligtarin ang outputs at ang inputs.
>> Sa ibang salita, sa sandaling ang isang tao na natatanggap ng iyong naka-encrypt na mensahe,
siya lamang ay may na malaman na parehong key.
Sila ay nakatanggap ng ciphertext.
At sa pamamagitan ng i-plug ang mga dalawang inputs sa sistema crypto,
ang algorithm, ito itim na kahon, sa labas ay dapat na dumating sa orihinal na plaintext.
At kaya iyon ang napakataas na antas view ng kung ano cryptography ay talagang
ang lahat ng tungkol sa.
>> Kaya sabihin makakuha ng doon.
Sabihin ngayon tumingin sa ilalim ng hood ng isang bagay
kami ay pagkuha para sa ipinagkaloob para nakaraang linggo, at para sa session na ito
here-- string.
Ang isang string sa dulo ng araw ay lamang ng isang pagkakasunod-sunod ng mga character.
>> Ito ay maaaring maging hello world, o kumusta Zamyla, o ano pa man.
Ngunit ano ang ibig sabihin nito sa maging isang pagkakasunod-sunod ng mga character?
Sa katunayan, ang CS50 library ay nagbibigay sa sa amin ng isang uri ng data na tinatawag na string.
>> Ngunit doon ay talagang walang ganoong bagay bilang isang string sa C.
Ito ay tunay na lamang ng isang pagkakasunod-sunod ng character, character, character,
character, likod, sa likod, sa likod, sa likod, upang i-back sa loob
ng memory ng iyong computer, o RAM.
At kami ay tumingin ng mas malalim sa na sa hinaharap kapag tinitingnan namin ang memory mismo,
at ang paggamit, at ang banta na kasangkot.
>> Ngunit ipaalam sa Isaalang-alang natin ang string Zamyla.
Kaya lang ang pangalan ng ang mga tao dito, Zamyla,
na ay isang pagkakasunod-sunod ng character, Z-A-M-Y-L-A.
At ngayon sabihin ipagpalagay na ang pangalan ni Zamyla ay naka-imbak sa loob ng isang computer
program.
>> Well, ito ay sa dahilan na kami ay magagawang upang tumingin sa mga character
paisa-isa.
Kaya ako lamang ang pagpunta upang gumuhit ng isang maliit na kahon sa paligid ng pangalan ni Zamyla dito.
At ito ay ang kaso sa C na kapag ikaw magkaroon ng isang string, tulad Zamyla-- at marahil
na string bumalik na galing isang function tulad get string,
maaari mong aktwal na manipulahin ito ng character sa pamamagitan ng character.
>> Ngayon, ito ay dyermeyn para sa pag-uusap sa kamay, dahil
sa cryptography kung gusto mong baguhin A to B, at B sa C, at C upang D,
at iba pa, na kailangan mo upang ma upang tumingin sa mga indibidwal na mga character
sa isang string.
Kailangan mong magagawang baguhin ang Z sa ibang bagay, ang A
sa ibang bagay, ang M sa ibang bagay, at iba pa.
At kaya kailangan namin ng isang paraan, programming, kaya
na magsalita, sa C upang magagawang baguhin at tumingin sa mga indibidwal na mga titik.
At maaari naming gawin ito tulad ng sumusunod.
>> Hayaan akong pumunta ulo pabalik sa CS50 IDE.
At hayaan mo akong magpatuloy at lumikha ng isang bagong file
na Tatawag ako sa pagkakataong ito string0, bilang aming unang tulad halimbawa, tuldok c.
At ako pagpunta sa sige at pumilantik ito up tulad ng sumusunod.
>> Kaya isama CS50.h, at pagkatapos ng pamantayang io.h,
kung saan ako halos palaging pagpunta sa ay gumagamit ng sa aking mga programa, hindi bababa sa
sa una.
int pangunahing walang bisa, at pagkatapos ay sa dito ako pagpunta sa gawin string ay makakakuha makakuha string.
At pagkatapos ay ako pagpunta sa sige, at gawin ito.
Gusto kong pumunta ng maaga at, bilang isang katinuan check,
lang sabihin, hello, porsiyento s, semi-colon, gumagawa string 0.
Uh oh, ano ang gagawin ko dito?
Oh, hindi ako nag-plug ito in.
Kaya natutunan aralin, na ay hindi intensyonal.
>> So error, mas porsiyento mga conversion kaysa data arguments.
At ito ay kung saan, sa line 7-- OK, kaya Mayroon akong,
quote magpanipi, na ang dahilan aking string sa printf.
Mayroon akong isang porsyento sign.
Ngunit ako nawawala ang pangalawang argumento.
>> Ako nawawala ang kuwit s, na kung saan Ko magkaroon ng sa nakaraang mga halimbawa.
Kaya ang isang magandang pagkakataon upang ayusin isa pang pagkakamali, hindi sinasadya.
At ngayon hayaan mo akong magpatakbo ng string0, i-type Zamyla.
OK, hello Zamyla.
>> Kaya na tumakbo namin ang ganitong uri ng programa ng ilang iba't ibang oras ngayon.
Ngunit sabihin gawin ang isang bagay ng maliit na naiiba ngayon.
Sa halip na lamang ang pag-print Zamyla ni buong pangalan out sa printf,
sabihin gawin ito ng character sa pamamagitan ng character.
>> Ako pagpunta sa gumamit ng isang para sa loop.
At ako pagpunta sa bigyan ang aking sarili isang pagbilang variable, na tinatawag na i.
At ako pagpunta sa panatilihin iterating, kaya hangga't i ay mas mababa kaysa sa haba ng s.
>> Ito ay lumiliko out, kami ay hindi gawin ito huling oras,
na c lumapit kumuha ng isang function na tinatawag na Stirling.
Bumalik sa araw, at sa pangkalahatan pa rin kapag ang pagpapatupad pag-andar,
mga kawani na tao ay madalas na piliin ang tunay maikli at malinaw pangalan na uri ng tunog
tulad ng kung ano ang gusto mo, kahit na ito ay nawawala ng ilang mga vowels o titik.
Kaya Stirling ay ang pangalan ng isang function na
tumatagal ng isang argument sa pagitan ng panaklong na dapat ay isang string.
At ito lamang ay nagbabalik ng isang integer, ang haba ng na string.
>> Kaya ito para sa loop on line 7 ay pagpunta upang simulan ang pagbibilang sa i katumbas ng 0.
Ito ay pagpunta sa dagdagan i sa bawat pag-ulit
ng 1, bilang namin ang paggawa ng ilang beses.
Ngunit ito ay pagpunta sa lamang gawin ito up hanggang sa punto
kapag ako ay ang haba ng string mismo.
>> Kaya ito ay isang paraan ng, sa huli, iterating sa paglipas ng ang mga character
sa string bilang ay ang mga sumusunod.
Pupunta ako upang i-print out hindi isang buong string, ngunit porsiyento c,
isang solong character sinundan sa pamamagitan ng isang bagong linya.
At pagkatapos ay ako pagpunta sa sige, at kailangan ko
upang sabihin na gusto kong i-print ith character ng s.
>> Kaya kung ako ay ang variable na nagpapahiwatig ang index ng string, kung saan
ikaw ay sa loob nito, kailangan ko para ma- sabihin, bigyan ako ang ith character ng s.
At c ay may isang paraan ng paggawa ng sa mga square bracket.
Mo lang sabihin ang pangalan ng string, na sa kasong ito ay s.
Pagkatapos ay gamitin mo square bracket, na kung saan ay karaniwang lamang sa itaas ng iyong Return o Enter
key sa keyboard.
At pagkatapos mong ilagay ang index ng character na gusto mong i-print.
Kaya ang index ay pagpunta sa maging isang number-- 0, o 1, o 2, o 3, o tuldok,
tuldok, tuldok, ang ilang mga iba pang mga numero.
>> At hindi na namin matiyak na ito ay pagpunta sa maging ang tamang numero, dahil ako
magbilangan sa 0.
At sa pamamagitan ng default, ang unang character sa isang string ay sa pamamagitan ng convention 0.
At ang pangalawang character ay bracket 1.
At ang ikatlong karakter ay bracket 2.
At hindi mo nais na pumunta masyadong Sa ngayon, ngunit kami ay hindi dahil kami
pagpunta sa lamang dagdagan i hanggang sa ito ay katumbas ng haba ng string.
At sa puntong, ito para sa loop ay hihinto.
>> Kaya hayaan mo akong magpatuloy at i-save ito programa, at run gumawa string 0.
Ngunit ako screwed up.
Kataon lamang deklarasyon ng function library Stirling may uri gayo't such-- ngayon,
ito tunog pamilyar.
Ngunit ito ay hindi printf.
At ito ay hindi makakuha ng string.
>> Hindi ko magtaas in sa parehong paraan ngayon.
Ngunit mapansin pababa dito isang maliit na down karagdagang, isama ang header string.h,
explicitly ibigay ang pagpapahayag ukol sa Stirling.
Kaya doon ay talagang isang palatandaan sa doon.
>> At sa katunayan ito ay lumiliko out may isa pang header file
na hindi namin na nagamit sa klase pa, ngunit ito ay
kabilang sa mga magagamit sa iyo, na tinatawag na string.h.
At sa file, string.h ay Stirling ipinahayag.
Kaya hayaan mo akong magpatuloy at i-save ito, gumawa string
0-- nice, walang error na mensahe ngayon.
>> ./string0 Zamyla, at ako tungkol sa upang pindutin ang Enter,
kung saang punto getstring ay pagpunta upang ibalik ang string, ilagay ito sa s.
Pagkatapos na ang para sa loop ay pagpunta upang umulit sa paglipas ng S character ng isa sa isang panahon,
at i-print ang mga ito isa sa bawat linya, dahil Ako ay nagkaroon na backslash n sa dulo.
Pagayon ako ay ligtaan na backslash n, at pagkatapos lamang i-print ang lahat ng Zamyla
sa parehong linya, epektibong reimplementing
printf, na kung saan ay hindi lahat na kapaki-pakinabang.
Ngunit sa kasong ito, hindi ko nagawa iyon.
Ang tunay ko na naka-print na isa character sa isang pagkakataon, isa sa bawat linya,
kaya na namin talagang makita ang mga epekto.
>> Ngunit dapat kong tandaan ang isang bagay dito.
At kami ay bumalik sa ito sa isang susunod na linggo.
Ito ay lumiliko out na ito code ay potensyal na maraming surot.
>> Ito ay lumiliko out na get string at ang ilang mga iba pang mga function sa buhay
gawin hindi kinakailangang laging bumalik kung ano ang iyong inaasahan.
Alam namin mula sa klase noong nakaraang oras sa ito na makakakuha
string ay dapat na ibalik ang isang string.
Ngunit paano kung ang mga uri ng user sa labas tulad isang mahabang salita, o talata, o sanaysay
na lamang ay hindi sapat memory sa computer upang magkasya ito.
>> Like, paano kung may mangyaring hindi mali sa ilalim ng hood?
Maaaring hindi ito madalas mangyari, ngunit ito ay maaaring mangyari nang isang beses
sa isang habang, very madalang.
At kaya ito ay lumiliko out na get string at pag-andar tulad ng ito ay gawin hindi kinakailangang
palaging bumalik string.
Sila ay maaaring ibalik ang ilang mga error na halaga, ilang sentinel halaga kaya na magsalita,
na nagpapahiwatig na isang bagay ay gone mali.
At gusto mo lamang malaman na ito mula sa pagkakaroon ng natutunan ito sa klase ngayon,
o pagkakaroon ng basahin ang ilang mga karagdagang dokumentasyon.
Ito ay lumiliko out na get string maaaring bumalik sa isang halaga na tinatawag na null.
Null ay isang espesyal na halaga na kami ay bumalik sa sa isang susunod na linggo.
Ngunit sa ngayon, lamang malaman na kung gusto ko upang maging talagang tamang sa paglipat ng pasulong
gamit get string, ako ay hindi dapat lamang tumawag ito,
at nang walang taros gamitin ang kanyang return halaga, nagtitiwala na ito ay isang string.
>> dapat kong sabihin ninyo muna, hey, maghintay ng isang minuto, lamang
magpatuloy kung s ay hindi katumbas null, kung saan null, muli,
ay lamang ng ilang mga espesyal na halaga.
At ito ay ang tanging espesyal na halaga sa iyo kailangang mag-alala tungkol sa para sa get string.
Kumuha string ay alinman sa pagpunta upang bumalik sa isang string o null.
>> At ito exclamation point ay katumbas ng pag-sign maaari mong malaman mula sa siguro math class
na maaari mong gumuhit ng isang pantay-pantay na mag-sign gamit isang linya sa pamamagitan ng ito upang ipahiwatig hindi matuwid.
Iyan ay hindi sa pangkalahatan ay isang character maaari mong i-type sa iyong keyboard.
At kaya sa karamihan ng mga wika programming, kapag gusto mong sabihin hindi pantay-pantay,
gumamit ka ng isang exclamation point, o mas kilala bilang putok.
Kaya sabihin mo bang katumbas, na kung saan nangangahulugan na hindi katumbas, logically.
Ito ay tulad ng mayroong walang dakila kaysa, o katumbas ng, o mas mababa sa
o katumbas ng key sa iyong keyboard na ginagawa ang lahat ng ito sa isang simbolo.
Kaya na ang dahilan kung bakit, sa nakaraang mga halimbawa, ginawa mo ang isang bukas na bracket, at pagkatapos ay
equal sign, upang gawin mas malaki kaysa sa o, sabihin, mas mababa sa.
>> Kaya kung ano ang takeaway dito?
Ito ay lamang ng isang paraan ngayon ng pagpapasok syntax na ito, ang tampok na ito,
iterating sa paglipas ng mga indibidwal character sa isang string.
At tulad ng mga square bracket daan sa iyo upang makakuha ng sa kanila,
isaalang-alang ang mga square bracket bilang uri ng hinting sa ito pinagbabatayan
disenyo, kung saan ang bawat karakter sa loob ng isang string
ay uri ng boxed sa isang lugar sa ilalim ng hood sa memorya ng iyong computer.
>> Ngunit sabihin gumawa ng isang variant ng ito.
Ito ay lumiliko out na ito program ay tama.
Kaya bawat CS50 axes para sa pagsusuri code, ito ay tama na ngayon.
Lalo na ngayon na ako ng paglagay ng tsek para null, ang program na ito ay hindi kailanman dapat bumagsak.
At ako lamang malaman na mula sa karanasan.
Ngunit mayroong walang ibang tao na maaari naming talagang magkamali dito.
Ngunit ito ay hindi masyadong mahusay na dinisenyo, dahil sabihin bumalik sa pangunahing kaalaman.
>> Una, principles-- ano ang ginagawa ng isang para sa loop gawin?
A para sa loop ay tatlong bagay.
Ito initializes ilang halaga, kung hilingin mo ito sa.
Sumusuri isang kondisyon.
At pagkatapos ay pagkatapos ng bawat pag-ulit, pagkatapos ng bawat cycle,
ito palugit ilang halaga, o mga halaga, dito.
>> Kaya kung ano ang ibig sabihin nito?
namin initialize i sa 0.
Kami ay suriin at siguraduhin i Mababa sa ang haba ng s, na kung saan ay Z-A-M-Y-L-A,
kaya kung saan ay mas mababa sa 6.
At, sa katunayan, 0 bilang mas mababa sa 6.
>> I-print namin out Z mula sa pangalan ni Zamyla.
Pagkatapos namin dinagdagan i mula 0 hanggang 1.
pagkatapos naming suriin, ay 1 mas mababa kaysa sa haba ng s?
Ang haba ng s ay 6.
Oo, ito ay.
>> Kaya i-print namin ang isang in ni Zamyla pangalan, ZA.
dagdagan namin i mula 0, sa 1, 2.
pagkatapos naming suriin, ay 2 mas mababa sa ang haba ng pangalan ni Zamyla.
6- kaya 2 ay mas mababa sa 6.
Oo, sabihin i-print out na ngayon M in pangalan Zamyla, ang ikatlong karakter.
>> Ang susi dito ay na sa bawat pag-ulit ng mga kuwento, Lalabas na ako,
ay i mas mababa kaysa sa haba ng Zamyla?
Ngunit ang catch ay na Stirling ay hindi isang ari-arian.
Yaong ng iyo kung sino ay may programmed bago sa Java o iba pang mga wika
Nang maalaman man ang haba ng isang string ay isang ari-arian, lamang ng ilang basahin lamang halaga.
>> Sa C sa kasong ito, kung ito ay isang function na ay literal
malaman ang bilang ng character sa Zamyla tuwing
tinatawag naming na function.
Sa bawat oras na hilingin sa iyo ang computer upang gamitin Stirling, ito ay ang pagkuha ng isang pagtingin sa Zamyla,
at sinasabi Z-A-M-Y-L-A, 6.
At ito ay nagbabalik 6.
Ang susunod na oras na tawagan ka ito sa loob na para sa loop,
ito ay pagpunta upang tumingin sa Zamyla muli, sinasabi Z-A-M-Y-L-A, 6.
At ito ay pagpunta upang bumalik 6.
Kaya kung ano ang bobo tungkol sa disenyo?
>> Bakit ang aking code ay hindi isang 5 sa 5 para sa disenyo ngayon, kaya na magsalita?
Well, ako na humihingi ng tanong kung hindi kinakailangan.
Ako ng paggawa ng mas maraming trabaho kaysa sa kailangan kong.
>> Kaya kahit na ang sagot ay tama, ako
humihingi ng computer, kung ano ang ang haba ng Zamyla muli,
at muli, at muli, at muli?
At na sagot ay hindi kailanman pagpunta upang baguhin.
Palaging Ito ay pagpunta sa maging 6.
>> Kaya ang isang mas mahusay na solusyon kaysa sa na ito ay magiging ang susunod na bersyon.
Hayaan akong sige at ilagay ito sa isang hiwalay na file na tinatawag na string1.c,
lamang upang panatilihin ito hiwalay.
At ito ay lumiliko out sa isang para sa loop, maaari mong aktwal na
Ipinahahayag maramihang mga variable sa iisang pagkakataon.
>> Kaya ako pagpunta sa panatilihin i at i-set ito sa 0.
Kundi pati na rin ako ng pagpunta sa magdagdag ng isang kuwit, at inyong sabihin,
bigyan ako ng isang variable na tinatawag na n, na ang halaga ay katumbas ng string haba ng s.
At ngayon, mangyaring gumawa ng aking kalagayan kaya hangga't i ay mas mababa sa n.
>> Kaya sa ganitong paraan, ang lohika ay magkapareho sa dulo ng araw.
Ngunit ako ay pag-alala sa halaga 6, sa kasong ito.
Ano ang haba ng pangalan ni Zamyla?
At ako ng paglagay ito sa n.
>> At Lalabas na ako pa rin ang kalagayan sa bawat oras.
Ay 0 mas mababa sa 6?
Is 1 mas mababa sa 6?
Ay 2 mas mababa sa 6, at iba pa?
>> Ngunit hindi ako humihingi sa computer muli, at muli, kung ano ang
ang haba ng pangalan ni Zamyla?
Ano ang haba ng pangalan ni Zamyla?
Ano ang haba ng pangalan na ito Zamyla ni?
Ako literal pagtanda na una at lamang sagutin sa ikalawang variable n.
Kaya ito ngayon ay hindi lamang tama, ngunit din mahusay na dinisenyo.
>> Ngayon, kung ano ang tungkol style?
pinangalanan ko ang aking mga variable pretty mabuti, nais kong sabihin.
Ang mga ito ay sobrang maikli at malinaw ngayon.
At iyon ang lahat-lahat fine.
>> Kung mayroon ka lamang ng isang string sa isang programa,
maaari ka rin tumawag ito s para sa string.
Kung mayroon ka lamang ng isang variable para sa pagbibilang sa isang programa,
maaari ka rin tumawag ito i.
Kung ikaw ay may isang haba, n ay sobrang karaniwang pati na rin.
Ngunit hindi ko ay may komento alinman sa aking code.
>> hindi ko na alam ang reader-- kung na ang aking TF, o TA,
o lamang colleague-- kung ano ang dapat na nagaganap sa programang ito.
At kaya upang makakuha ng magandang estilo, ano ang Gusto ko nais na gawin
ay this-- bagay tulad humingi ng gumagamit para sa input.
At kaya kong muling isulat ito sa anumang bilang ng mga paraan.
>> Siguraduhin s-- siguraduhin get string nagbalik ng isang string.
At pagkatapos ay sa here-- at ito ay marahil ang pinaka-mahalagang comment-- umulit
sa ibabaw ng mga character sa s isa sa isang panahon.
At maaari ko bang gamitin ang anumang pagpili ng wika English
dito upang ilarawan ang bawat ng mga chunks ng code.
>> Pansinin na hindi ko ilagay ang isang magkomento sa bawat linya ng code,
talagang lamang sa mga kagiliw-giliw sa buhay, ang mga na
ay may ilang mga kahulugan na maaaring ako nais na gumawa ng sobrang malinaw sa isang tao
pagbabasa ng aking code.
At bakit ka pagtawag makakuha string humingi ng gumagamit para sa input?
Kahit isa na ay hindi kinakailangan lahat na naglalarawan.
Ngunit ito ay tumutulong nagkukwento, dahil ang pangalawang linya sa kuwento ay, siguraduhin
makakuha ng string nagbalik ng isang string.
>> At ang ikatlong linya sa kuwento ay, umulit sa ibabaw ng mga character sa s isa
sa isang pagkakataon.
At ngayon lamang para sa mabuting pamamaraan, Ako pagpunta sa sige at idagdag
isa pang comment na lang sabi ni print i-ika na character sa s.
Ngayon, ano ang ginawa ko sa pagtatapos ng araw?
>> Ako ay nagdagdag ng ilang Ingles salita sa anyo ng mga komento.
Ang slash slash symbol ibig sabihin nito, hey, computer na ito ay para sa mga tao,
hindi para sa iyo, ang computer.
Kaya sila ay hindi pinansin logically.
Ang mga ito ay lamang doon.
>> At, sa katunayan, CS50 IDE nagpapakita ito bilang kulay-abo, na rin ang pagiging kapaki-pakinabang, ngunit hindi key
sa programa.
Pansinin kung ano ang maaari mong gawin ngayon.
Kahit na alam mo C programming o hindi, ikaw
maaari lamang tumayo sa likod sa ito programa, at sagapin ang mga komento.
Humiling sa user para sa input, siguraduhin makakuha ng string nagbalik ng isang string,
umulit sa ibabaw ng mga character sa s nang paisa-isa, i-print ang character
i-ika na character sa s-- hindi mo gusto kahit na may upang tumingin sa ang code
upang maunawaan kung ano ang ginagawa ng programang ito.
At, mas mabuti pa, kung ikaw mismo tumingin sa programang ito sa isang linggo o dalawa,
o isang buwan, o isang taon, masyado kang walang
sa pagkakatitig sa ang code, sisikaping matandaan,
kung ano ang sinusubukan ko na gawin sa ang code na ito?
>> Mo sinabi na sa iyong sarili.
You inilarawan na ito para sa iyong sarili, o ilang kasamahan, o TA, o tf.
At kaya ito ay ngayon maging tama, at magandang disenyo,
at sa huli magandang estilo pati na rin.
Kaya gawin panatilihin na sa isip.
>> Kaya mayroong isang iba pang bagay na ako pagpunta sa gawin dito
na maaaring ipinahahayag ngayon kung ano mismo ang ay nangyayari sa ilalim ng hood.
Kaya mayroong ang tampok na ito sa C, at iba pang mga wika,
tinatawag typecasting na ang alinman kataon
o malinaw na nagbibigay-daan sa mong i-convert mula sa isang uri ng data sa isa pa.
Kami ay pagharap sa gayon malayo ngayon sa mga string.
>> At string ay character.
Ngunit isipin ang mula sa linggo 0, ano ang mga character?
Character ay lamang ng isang abstraction sa itaas ng numbers-- decimal na numero,
at decimal na numero ay talagang lamang ng isang abstraction sa itaas ng binary numero,
bilang namin tinukoy dito.
>> Kaya mga character ay mga numero.
At numero ay mga character, lamang depende sa konteksto.
At ito ay lumiliko out na sa loob ng isang computer program,
maaari mong tukuyin kung paano mo gustong upang tumingin sa bits sa loob ng programang iyon?
>> Recall linggu 0 na nagkaroon kami Ascii, na kung saan ay lamang ang code na ito
mapping titik sa mga numero.
At aming sinabi, capital A ay 65.
Capital B ay 66, at iba pa.
>> At pansinin, namin mahalagang magkaroon chars sa hanay sa itaas na dito, tulad ng C ay tumawag sa kanila,
mga character, at pagkatapos ay ints sa pangalawang hilera.
At ito ay lumiliko out maaari mong convert walang putol sa pagitan ng dalawang, karaniwang.
At kung gusto naming gawin ito kusa, kami
maaaring nais na pagharap sa isang bagay isang bagay na tulad nito.
>> Maaari naming nais i-convert upper case upang babaan
kaso, o lower case sa itaas na kaso.
At ito ay lumiliko out doon ni talagang isang pattern dito
maaari naming yakapin sa loob lamang ng ilang sandali.
Ngunit sabihin tumingin muna sa isang halimbawa ng paggawa na ito tahasan.
>> Pupunta ako sa bumalik sa CS50 IDE.
Pupunta ako upang lumikha ng isang file na tinatawag na Ascii 0.c.
At ako pagpunta sa sige at idagdag ang aking karaniwang io.h sa tuktok, int pangunahing walang bisa
sa tuktok ng aking function.
At pagkatapos lamang ako pagpunta sa gawin ang mga following-- isang para sa loop mula sa i katumbas,
sabihin nating, 65.
>> At pagkatapos ay i ay pagpunta sa maging mas mababa sa 65, plus 26 titik sa alpabeto.
Kaya kukunin ko na ipaalam sa computer gawin ang matematika para sa akin doon.
At pagkatapos ay sa loob ng loop, kung ano ako pagpunta sa i-print?
>> % C ay% i backslash n.
At ngayon gusto kong plug sa dalawang mga halaga.
pansamantalang Naglagay ako tanong nagmamarka doon upang mag-imbita ang tanong.
>> Gusto kong umulit mula sa 65 pasulong para sa 26 titik ng alpabeto,
pag-print out sa bawat pag-ulit na integral katumbas ng character.
Sa ibang salita, gusto kong umulit higit sa 26 mga numero sa pag-print
kung ano ang Ascii character ay, ang titik, at kung ano ang kaukulang number is--
talagang lamang recreating ang tsart mula sa na slide.
Kaya kung ano ang dapat na ang mga tandang pananong?
>> Well, ito ay lumiliko out na ang ikalawang dapat isa lamang ay ang variable i.
Gusto kong makita na bilang isang numero.
At ang gitnang argument dito, maaari ko bang sabihin sa ang computer
sa paggamot na integer i bilang isang character, sa gayon ay
upang palitan ito dito para sa porsiyento C.
>> Sa ibang salita, kung ako, ang human programmer, alam
ito ay lamang numero sa pagtatapos ng araw.
At alam ko na 65 ay dapat map sa ilang character.
Sa pamamagitan ng ito tahasang cast, may parenthesis,
ang pangalan ng uri ng data na gusto mong convert sa, at isang closed parenthesis,
maaari mong sabihin sa computer, hey, computer,
convert ito integer sa isang pansamantalang trabaho.
>> Kaya kapag tumakbo ko ito programa pagkatapos ipon,
sabihin makita kung ano get-- ba akong gumawa ng Ascii 0.
Darn ito, ano ang gagawin ko mali dito?
Gamitin ng hindi nagbigay-alam identifier, lahat ng karapatan, hindi intensyonal,
ngunit sabihin makita kung hindi namin Maaari dahilan sa pamamagitan ng ito.
>> Kaya line five-- kaya hindi ko makuha masyadong malayo bago screwing up.
Iyan ay OK.
Kaya line 5 para i katumbas 65-- nakikita ko.
Kaya tandaan na sa C, hindi katulad ng ilang wika kung mayroon kang bago programming
karanasan, ikaw ay may upang sabihin ang computer,
hindi katulad Scratch, kung ano uri ng variable na ito ay.
>> At Nakalimutan ko ang isang key phrase dito.
Sa limang linya, ako ay nagsimula gamit i.
Ngunit hindi ko ay may sinabi sa C kung ano ang data type ito ay.
Kaya ako pagpunta sa pumunta ka dito at sabihin, ah, gawin itong isang integer.
>> Ngayon ako pagpunta sa sige at mag-recompile.
Na naayos na.
./ascii0 Enter, na ang uri ng cool.
Hindi lamang ito ay napakabilis na upang hilingin sa computer na ito pinag-uusapan,
sa halip na naghahanap up ito sa isang slide, ito naka-print out isa sa bawat linya, A ay 65,
B ay 66, ang buong daa'y down-- dahil ako ginawa ito 26 times-- sa ang mga titik z,
na kung saan ay 90.
At, sa katunayan, bahagyang mas matalino gagawin
ay para sa akin hindi na umaasa sa computer upang magdagdag 26.
Ko maaaring magkaroon lamang gawin 90 pati na rin, kaya mahaba
dahil hindi ko gawin ang parehong pagkakamali ng dalawang beses.
Gusto kong pumunta up sa pamamagitan ng z, hindi lamang up sa pamamagitan y.
>> Kaya na ang isang tahasang cast.
Ito ay lumiliko out na ito ay hindi kahit na kinakailangan.
Hayaan akong magpatuloy at muling patakbuhin ito compiler, at gawin uli ang Ascii 0.
Ito ay lumiliko out na ang C ay medyo smart.
>> At printf, sa partikular, ay medyo smart.
Kung kamakailan mo lamang pumasa sa isang i dalawang beses para sa parehong mga placeholder, printf
ay mapagtanto, oh, well alam ko sa iyo ibinigay sa akin ng isang integer-- ilang numero,
tulad ng 65, o 90, o kahit anong.
Ngunit nakikita ko na gusto mo sa akin upang i-format na numero tulad ng isang character.
At kaya printf maaaring kataon cast ang int sa isang pansamantalang trabaho para sa iyo pati na rin.
Kaya na ay hindi isang problema sa lahat.
>> Ngunit mapansin, dahil sa pagkapareho ito maaari naming talagang gawin ito pati na rin.
Hayaan akong sige at gumawa ng isa iba pang mga bersyon ng this-- Ascii 1.c.
At sa halip na iterating sa paglipas ng integers, maaari talagang pumutok ang iyong isip
sa pamamagitan ng iterating sa paglipas ng mga character.
Kung ang isang char c makakakuha capital A, ako nais na sige, at gawin ito,
kaya hangga't C ay mas mababa kaysa sa o katumbas sa kabisera Z. At sa bawat pag-ulit
Gusto kong dagdagan C, maaari ko ngayon sa aking printf linya dito
sabihin nating, porsiyento C ay porsiyento i muli, comma C.
>> At ngayon, maaari ba akong pumunta sa iba pang direksyon, paghahagis ang character explicitly
sa isang integer.
Kaya, muli, kung bakit nais mong gawin ito?
Ito ay isang maliit na kakaiba upang ayusin ng bilangin sa mga tuntunin ng mga character.
>> Pero kung naiintindihan mo kung ano ang nangyayari sa ilalim ng hood,
may tunay na walang magic.
Lamang ka na nagsasabi, hey, computer bigyan ako ng isang variable na tinatawag na C ng uri ng pansamantalang trabaho.
Initialize ito sa capital A. At mapansin single quotes matter.
>> Para sa mga character sa C, isipin ang mula sa noong nakaraang linggo, gumamit ka ng single quotes.
Para sa mga string, para sa mga salita, parirala, gumamit ka ng double quotes.
OK, computer, panatilihin ang paggawa na ito, kaya hangga't ang character ay mas mababa sa
o katumbas ng z.
At alam ko mula sa aking Ascii mesa na ang lahat sa mga Ascii code ay magkadikit.
>> Walang gaps.
Kaya lamang A sa pamamagitan ng Z, na pinaghihiwalay ng isang numero sa bawat isa.
At pagkatapos ay maaari kong dagdagan isang pansamantalang trabaho, kung ako ay talagang gusto.
Sa pagtatapos ng araw, ito ay lamang ng isang numero.
Alam ko ito.
Kaya ang maaari kong lamang maglakas-loob na magdagdag ng 1 sa mga ito.
>> At pagkatapos ay oras na ito, i-print ko c, at pagkatapos ay ang mahalagang katumbas.
At hindi ko kahit na kailangan ang tahasang cast.
ang maaari kong ipaalam sa printf at ang computer na figure things out,
kaya na ngayon kung nagpatakbo ako gumawa Ascii1./ascii1,
nakukuha ko ang eksaktong parehong bagay pati na rin.
>> Useless program, though-- walang sinuman ay pagpunta sa aktwal na magsulat software
upang malaman kung, kung ano ay ang numero na mapa sa A, o B, o Z?
lamang Ikaw ay pagpunta sa Google ito, o tingnan ito online, o hanapin ito
sa isang slide, o mga katulad.
Kaya kung saan ito talagang makakuha kapaki-pakinabang?
>> Well, pagsasalita ng na slide, mapansin mayroong
isang aktwal na pattern dito sa pagitan ng uppercase at lowercase na ay hindi aksidenteng.
Pansinin na capital A ay 65.
Lowercase isang ay 97.
At kung paano malayo ay lower case a?
>> Kaya 65 ay kung gaano karaming mga hakbang ang layo mula 97?
Kaya 97 minus 65 ay 32.
Kaya capital isang ay 65.
Kung nagdagdag ka ng 32 sa mga iyon, kumuha ka ng lowercase ng.
At, equivalently, kung ibawas mo 32, makakuha ka pabalik sa kabisera A-- parehong sa B
sa maliit na b, big C sa maliit c.
>> Ang lahat ng mga gaps ay 32 apart.
Ngayon, ito ay tila upang payagan sa amin upang gawin ang isang bagay tulad ng Microsoft Word,
o Google Docs tampok, kung saan mo maaaring piliin ang lahat at iyo ngang sabihing,
baguhin ang lahat sa lowercase, o baguhin ang lahat ng sa itaas na kaso,
o baguhin lamang ang unang salita ng isang pangungusap sa itaas na kaso.
Maaari naming talagang gawin ang isang bagay tulad na ating sarili.
>> Hayaan akong sige at i-save ang isang file dito na tinatawag na sulatin sa malaking titik 0.c.
At sabihin sige at gumawa ng isang program na gumagana nang eksakto na ang mga sumusunod.
Kaya isama ang CS50 library.
At isama standard I / O.
>> At alam ko na ito ay paparating na.
Kaya ako pagpunta sa ilagay ito sa doon na, string.h,
kaya wala akong access sa mga bagay tulad ng Stirling,
at pagkatapos ay int pangunahing walang bisa, gaya ng dati.
At pagkatapos ay ako pagpunta sa sige at gawin string ay makakakuha makakuha string,
lamang upang makakuha ng isang string mula sa user.
At pagkatapos ay ako pagpunta sa gawin ang aking katinuan check.
Kung string ay hindi katumbas null, pagkatapos ito ay ligtas upang magpatuloy.
At kung ano ang gusto kong gawin?
Pupunta ako upang umulit mula sa i katumbas ng 0, at n hanggang sa ang string haba ng s.
>> At ako pagpunta sa gawin ito kaya hangga't i Mababa sa n, at i plus plus.
Sa ngayon, ako ay talagang lamang paghiram ng mga ideya mula sa bago.
At ngayon ako pagpunta sa kitang ipakilala sa isang branch.
>> Kaya sa tingin pabalik sa simula, kung saan kami ay nagkaroon ng mga tinidor sa kalsada,
at noong nakaraang linggo sa C. Ako pagpunta sa sabihin ito, kung ang i-ika na character sa s
ay mas malaki kaysa sa o pantay sa mas mababang kaso a,
at- sa scratch ng gagawin mo literal sabihin at, ngunit sa C sasabihin mo ampersand,
ampersand-- at ang i-ika na character sa s ay mas mababa sa o katumbas ng mas mababang kaso z,
sabihin gawin ang isang bagay na interesante.
Natin ang aktwal na-print ng karakter na walang newline
iyon ay ang character sa string, ang i-ika na character sa string.
>> Ngunit sabihin sige at ibawas 32 mula dito.
Iba Pa kung ang karakter sa string na kaming naghahanap
ay hindi sa pagitan maliit a at maliit na z, sige
at lamang naka-print ito out hindi nabago.
Kaya ipinakilala namin ang ito bracketed notation
para sa aming mga string upang makakuha ng sa i-ika na character sa string.
>> Nagdagdag ako ng ilang mga kondisyon na lohika, tulad ng Scratch sa linggo ng isa noong nakaraang linggo, kung saan
Tingin lang ako gamit ang aking pangunahing pag-unawa sa kung ano ang
nangyayari sa ilalim ng hood.
Ay ang i-ika na katangian ng s mas malaki kaysa sa o katumbas ng a?
Like, ay ito 97, o 98, o 99, at iba pa?
>> Ngunit ito ay din mas mababa kaysa sa o katumbas sa ang halaga ng lowercase z?
At kung gayon, ano ang ibig sabihin ang linyang ito?
14, ito ay isang uri ng mikrobyo ng ang buong ideya,
mapakinabangan ang sulat sa pamamagitan ng lamang subtracting 32 mula dito,
sa kasong ito, dahil alam ko, sa bawat na chart, kung paano ang aking mga numero ay kinakatawan.
Kaya sabihin sige at patakbuhin ito, pagkatapos ipon mapakinabangan 0.c,
at tumakbo mapakinabangan 0.
>> Sabihin i-type sa isang bagay tulad ng Zamyla sa lahat ng maliit ipasok.
At ngayon kami ay may Zamyla sa lahat ng malalaki.
ni-type sa Rob sa lahat ng maliit Hayaan.
Tayo'y subukan Jason sa lahat ng maliit Hayaan.
At panatilihin namin ang pagkuha ng sapilitang capitalization.
May isang menor de edad bug na ako uri ng hindi inaasahan.
Pansinin ang aking bagong prompt ay nagtatapos up sa parehong linya bilang kanilang mga pangalan,
na nararamdaman ng isang maliit na makalat.
>> Kaya ako pagpunta sa pumunta dito, at talagang sa dulo ng programang ito
print out ang isang newline character.
Iyon lang.
Sa printf, hindi mo na kailangang pumasa sa mga variable o format code.
Maaari mong literal i-print lamang bagay tulad ng isang newline.
>> Kaya sabihin sige at gumawa magsamantala 0 muli, muling palabas ng pelikula ito, Zamyla.
At ngayon ito ay isang maliit prettier.
Ngayon, ang aking prompt ay sa sarili nitong bagong linya.
Kaya na ang lahat ng fine at mabuti.
Kaya na ang isang magandang halimbawa.
Ngunit hindi ko kahit na kinakailangan kailangang hard code mga 32.
Alam mo ba?
kaya kong say-- hindi ko kailanman matandaan kung ano ang pagkakaiba ay.
>> Ngunit alam ko na kung ako magkaroon ng isang maliit na titik sulat,
Ko talaga nais na ibawas off anuman ang distansya ay sa pagitan ng maliit na
isang at big A, dahil kung akala ko na lahat ng iba pang mga titik ay ang parehong,
na dapat makakuha ng trabaho tapos na.
Ngunit sa halip na gawin iyon, alam mo kung ano?
May isa pang paraan pa rin.
>> Kung na sulatin sa malaking titik 1.c-- kung ako ay upang ilagay na sa isang hiwalay na file.
sabihin na sulatin sa malaking titik 2.c ang mga sumusunod.
Ako pagpunta sa talagang linisin ito up dito.
At sa halip na kahit pagkakaroon upang alam o pag-aalaga ang tungkol sa mga mababang antas
pagpapatupad ng mga detalye, ako sa halip lamang ng pagpunta sa i-print ang isang character,
quote magpanipi, porsiyento C, at pagkatapos ay tumawag ng isa pang function na
umiiral na tumatagal ng isang argument, kung saan ay isang character, tulad nito.
>> Ito ay lumiliko out sa C, may isa pang function call
sa itaas na, na bilang ang pangalan nito nagmumungkahi ay tumatagal ng isang karakter
at gumagawa ng ito sa kanyang mga malaking titik katumbas, at pagkatapos ay bumalik ito
kaya na printf ay maaaring plug ito sa doon.
At kaya upang gawin ito, bagaman, ako kailangan upang ipakilala isa pang file.
Ito ay lumiliko out mayroong isa pang file na nais mong lamang malaman mula sa klase,
o isang aklat-aralin, o isang online na reference, na tinatawag na C type.h.
>> Kaya kung idagdag ko na sa aking mga header file, at ngayon muling sumulat ng libro sa programang ito,
capitalize2, ./capitalize2 Enter.
ni-type sa Zamyla sa lahat Hayaan lowercase, gumagana pa rin ang parehong.
Pero alam mo kung ano?
Ito ay lumiliko out na sa itaas na ay may ilang mga iba pang mga pag-andar.
>> At hayaan mo akong ipakilala ito Command dito, uri ng awkwardly
pinangalanan, ngunit ang tao para sa manu-manong.
Ito ay lumiliko out na ang karamihan sa Linux computer, bilang kami ay gumagamit here-- Linux operating
system-- magkaroon ng isang utos tinatawag na tao, na nagsasabing,
hey, computer, ninyo ako ang computer mano-manong.
Ano ang gagawin mo nais na maghanap sa manual na?
>> Gusto kong tumingin up ang pag-andar tinawag upang itaas, ang Enter.
At ito ay isang maliit na misteriyoso basahin kung minsan.
Ngunit mapansin kami sa Linux programmer ni manu-manong.
At ito ay ang lahat ng teksto.
At mapansin na mayroong mga pangalan ng pag-andar up dito.
Ito ay lumiliko out na ito ay may isang pinsan na tinatawag na sa mas mababang, na kung saan ay ang kabaligtaran.
At pansinin ilalim buod, upang magamit ang gumana ang tao na pahina, kaya na magsalita,
ay nagsasabi sa akin na ako kailangang isama c type.h.
At nalalaman ko na mula sa pagsasanay.
>> Narito, ito ay nagpapakita sa akin ang dalawang modelo para sa pag-andar,
kaya na kung ako kailanman nais na gamitin ang Alam ko kung ano sila ay kumuha ng bilang input,
at kung ano ang kanilang bumalik bilang output.
At pagkatapos ay kung ako basahin ang paglalarawan, nakikita ko
nang mas detalyado kung ano ang function.
Ngunit mas mahalaga, kung tumingin ako sa ilalim return halaga,
ito says ang halaga ay bumalik ay na ng ang na-convert sulat,
o C, ang orihinal na input, kung ang conversion ay hindi posible.
>> Sa ibang salita, sa itaas na ay susubukan upang i-convert ng isang sulat sa itaas na kaso.
At kung gayon, ito ay pagpunta sa ibalik ito.
Ngunit kung ito ay hindi maaaring para sa ilang mga reason-- marahil ito ay na itaas na kaso,
marahil ito ay isang exclamation point o ilang iba pang punctuation--
lamang ito ay pagpunta sa ibalik ang orihinal na C,
na nangangahulugan na maaari ko mapapalitaw ang aking code mas mahusay na dinisenyo tulad ng sumusunod.
>> Hindi ko kailangan ang lahat ng mga darn linya ng code.
Ang lahat ng mga linya na ako lamang naka-highlight Maaari
gumuho sa lamang ng isang simpleng line, na kung saan ay this-- printf porsiyento
c sa itaas S bracket i.
At ito ay magiging isang halimbawa ng mas mahusay na disenyo.
>> Bakit ipatupad sa 7 o 8 mga linya ng code, kahit ano ito ay ko na lang
tinanggal, kapag maaari mong sa halip tiklupin lahat ng na logic at desisyon paggawa
sa isang solong linya, 13 ngayon, na umaasa sa isang library function--
isang function na ito ay may C, ngunit na gumagana nang eksakto kung ano ang nais mo ito upang gawin.
At, lantaran, kahit na hindi na ito ay dumating na may C,
maaari mong ipatupad ito sa iyong sarili, tulad ng nasaksihan namin, na may makakuha ng mga negatibong int
at makakuha ng positibong int noong nakaraang linggo pati na rin.
>> Ang code na ito ngayon ay mas nababasa.
At, sa katunayan, kung mag-scroll namin up, tingnan mo kung ano mas compact
ang bersyon na ito ng aking mga programa ay.
Ito ay isang maliit top mabigat ngayon, sa lahat ng mga Kasama.
Ngunit iyon lamang ang OK, dahil ngayon ako nakatayo sa mga balikat ng mga programmers
bago ako.
At kahit sino ito ay na ipinatupad sa itaas na talagang
ginawan ako ng isang pabor, marami tulad ng kung sinuman ipinatupad Stirling talagang
ginawan ako ng isang pabor ang ilang mga oras ang nakalipas.
At kaya ngayon kami ay may isang mas mahusay na disenyo ng programa
na nagpapatupad ng eksaktong parehong logic.
>> Eto na ng stirling, sabihin mo akong magpatuloy at gawin ito.
Hayaan akong sige at i-save ang file na ito bilang stirling.c.
At ito ay lumiliko out, maaari naming Peel pabalik isa pang layer pretty lang ngayon.
Ako pagpunta sa sige at mamalo up ng isa pang programa sa pangunahing
dito na lamang muling nagpapatupad string haba tulad ng sumusunod.
Kaya narito ang isang linya ng code na makakakuha ako ng isang string mula sa user.
Panatilihin namin ang paggamit na ito muli at muli.
Hayaan akong magbigay sa aking sarili ng isang variable na tinatawag na n uri ng int na nag-iimbak ng isang numero.
>> At hayaan mo akong sige at gawin ang mga sumusunod na lohika.
Habang ang mga n-th character sa s ginagawa hindi katumbas backslash 0, sige
at paglakas n.
At pagkatapos ay i-print out printf porsiyento i n.
inaangkin ko na ang program na ito dito, walang pagtawag string haba,
figure out ang haba ng isang string.
>> At ang magic ay ganap na encapsulated sa linya 8
dito sa kung ano ang hitsura tulad ng mga bagong syntax, ito backslash 0 in single quotes.
Ngunit kung bakit ay na?
Well, isaalang-alang kung ano ang nangyaring pagpunta sa lahat ng oras na ito.
>> At bilang isang bukod bago ko kalimutan, napagtanto masyadong, na sa karagdagan sa mga pahina ng tao
na nanggaling sa isang tipikal na Linux system tulad ng CS50 IDE,
mapagtanto na namin, ang staff ni course, mayroon ding
ginawa ng isang website bersiyon ng parehong ideya na tinatawag na
reference.cs50.net, na may ang lahat ng mga parehong pahina ng tao,
lahat ng na parehong dokumentasyon, pati na rin
isang maliit na kahon sa tuktok na nagbibigay-daan mong i-convert ang lahat ng mga medyo
arcane wika sa mas kumportable mode, kung saan kami, ang pagtuturo kawani,
may nawala sa pamamagitan at sinubukan upang gawing simple ang ilan sa mga wika upang panatilihin ang mga bagay
na nakatutok sa mga ideya, at hindi ang ilan sa mga kanipisan.
Kaya tandaan, reference.cs50.net bilang isa pang mapagkukunan pati na rin.
>> Nguni't bakit nalulugod string haba ng trabaho sa ang paraan na iminungkahi ko ang isang sandali ang nakalipas?
Narito ang pangalan ni Zamyla muli.
At narito ang pangalan ni Zamyla boxed in, bilang panatilihin ko ang paggawa,
pintura ng isang larawan ng mga ito na, talagang, lamang ng isang pagkakasunod-sunod ng mga character.
Ngunit Zamyla ay hindi umiiral sa paghihiwalay sa isang programa.
>> Kapag kayo magsulat at magpatakbo ng isang programa, ginagamit mo ang iyong Mac o iyong PC
ng memory, o RAM kaya na magsalita.
At maaari mong isipin ang iyong computer bilang pagkakaroon
maraming mga gigabytes ng memory mga araw na ito.
At isang kalesa ay nangangahulugan bilyun-bilyong, kaya bilyong bytes.
>> Ngunit sabihin rewind sa oras.
At ipagpalagay na aming ginagamit isang tunay na lumang computer na
lamang ay may 32 bytes ng memorya.
kaya kong, sa aking computer screen, lamang gumuhit ito out tulad ng sumusunod.
>> maaari ko lang sabihin na ang aking computer ay may ang lahat ng ito memory.
At ito ay tulad ng isang stick ng memorya, kung isipin mo ang ating larawan mula sa huling panahon.
At kung ako lang hatiin ito sa sapat na beses,
inaangkin ko na ako ay may 32 bytes ng memorya sa screen.
>> Ngayon, sa katotohanan, maaari ko lamang gumuhit sa ngayon sa screen na ito dito.
Kaya ako pagpunta sa sige, at sa pamamagitan lamang ng convention,
gumuhit memorya ng aking computer bilang grid, hindi lamang bilang isang tuwid na linya.
Sa partikular, i-claim ko na ngayon na ang grid na ito, ito 8 sa pamamagitan ng 4 grid,
lamang ay kumakatawan sa lahat 32 bytes ng memorya na magagamit sa aking Mac,
o magagamit sa aking PC.
At sila ay pambalot sa sa dalawang linya, lamang
dahil ito akma pa sa screen.
Ngunit ito ay ang unang byte.
Ito ang ikalawang byte.
Ito ang pangatlong byte.
>> At ito ang ika-32 byte.
O kaya naman, kung sa tingin namin tulad ng isang computer siyentipiko, ito ay byte 0, 1, 2, 3, 31.
Kaya mo ay may 0 hanggang 31, kung simulan mo pagbibilang sa 0.
>> Kaya kung ginagamit namin ang isang programa na mga tawag makakuha string,
at kami makakuha ng isang string mula sa mga tao tulad ko na tinatawag na Zamyla, Z-A-M-Y-L-A,
kung paano sa mundo ay ang computer na subaybayan ng kung saan byte,
na tipak ng memory, aari na kung saan string?
Sa ibang salita, kung tayo ay magpatuloy sa type ng isa pang pangalan sa mga computer,
tulad nito Andi, pagtawag makakuha ng string sa ikalawa'y pakikita na
A-N-D-I ay upang tapusin up sa memory ng computer pati na rin.
Pero paano?
>> Well, ito ay lumiliko out na sa ilalim ng hood, kung ano ang C ay kapag pag-iimbak ng mga string
na ang mga tao uri sa, o na dumating mula sa ibang mga pinagmulan, ay ito
delineates dulo ng mga ito sa isang espesyal na character-- backslash
0, na kung saan ay lamang ng isang espesyal na paraan na sabihing 80 bits sa isang hilera.
>> Kaya A-- ito ang bilang 97 pagpapabalik.
Kaya ang ilang mga pattern ng 8 bits kumakatawan decimal na numero 97.
backslash ito 0 ay literal ang bilang 0, a.k.a. nul, N-U-L, hindi katulad ng mas maaga,
N-U-L-L, na usapan natin ang tungkol.
Ngunit sa ngayon, lamang malaman na ito backslash 0 ay lamang 80 bits sa isang hilera.
>> At ito ay lamang ang linyang ito sa buhangin na ay magsabi ng anoman sa kaliwa
kabilang sa isa string, o isang uri ng data.
At anumang bagay sa kanan ay kabilang sa iba pang dahilan.
ang pangalan Andi, samantala, na lamang visually
ang mangyayari sa wrapper sa sa iba pang mga linya, ngunit ito lamang ay isang Aesthetic detalye,
parehas ay nul tinapos.
>> Ito ay isang string ng isang A-N-D-I character, plus ang ikalimang lihim na character,
ang lahat ng 0 bits, na lamang demarcates sa dulo ng pangalan ni Andi pati na rin.
At kung ang tawag namin makakuha ng string sa pangatlong beses sa computer upang makakuha ng isang string tulad ng
Maria, M-A-R-I-A, katulad ay Maria pangalan nul tinapos sa backslash 0.
>> Ito ay sa panimula naiiba mula sa kung paano ang isang computer ng gagawin ay karaniwang
mag-imbak ng isang integer, o isang Float, o iba pang uri ng data pa rin, dahil pagpapabalik,
isang integer ay karaniwang 32 bits, o 4 bytes, o marahil kahit na 64 bits,
o walong bytes.
Ngunit maraming mga primitives sa isang computer sa isang programming language
magkaroon ng isang nakapirming numero ng bytes sa ilalim ng hood--
siguro 1, siguro 2, siguro 4, siguro 8.
>> Ngunit mga string, sa pamamagitan ng disenyo, ay may isang dynamic na bilang ng mga character.
Hindi mo alam nang maaga, hanggang sa ang mga tao na uri sa Z-A-M-Y-L-A,
o M-A-R-I-A, o A-N-D-I. Hindi mo alam kung kung gaano karaming beses ang user ay pagpunta sa hit
ang keyboard.
Samakatuwid, hindi mo alam kung paano maraming mga character in advance
ikaw ay pagpunta sa kailangan.
>> At kaya C lamang ang uri ng dahon tulad ng isang lihim breadcrumb sa ilalim ng hood
sa dulo ng string.
Pagkatapos pag-iimbak ng Z-A-M-Y-L-A sa memorya, ito rin ay lamang inilalagay ang katumbas
ng isang panahon.
Sa katapusan ng isang pangungusap, pero ilalagay 80 bits, sa gayon ay
tandaan kung saan Zamyla ay nagsisimula at nagtatapos.
>> Kaya kung ano ang koneksyon, pagkatapos, sa programang ito?
Ang program na ito dito, Stirling, ay lamang ng isang mekanismo
para sa pagkuha ng isang string mula sa gumagamit, line 6.
Line 7, ako'y nagpapahayag ng isang variable tinatawag n at itakda ito katumbas ng 0.
>> At pagkatapos ay sa linya 8, simpleng Tinanong ko ang tanong, habang ang n-ika-character ay
hindi katumbas ang lahat ng 0 bits-- sa ibang salita, ay hindi
pantay na ang espesyal na character, backslash 0, na
ay isa lamang sa mga espesyal na nul character-- sige at lamang dagdagan n.
>> At panatilihin ang paggawa nito, at sundin mo ginagawa ito, at panatilihin ang paggawa nito.
At kaya kahit na sa nakaraan ginamit namin i,
ito ay ganap na ganap pagmultahin semantically gamitin n,
kung ikaw ay lamang sinusubukan mong bilangin ang oras na ito kusa,
at nais lamang upang tumawag ito n.
Kaya ito lamang mapigil ang humihingi ng tanong, ay ang n-ika-character ng s lahat 0s?
Kung hindi, tumingin sa susunod na hitsura, Tumingin sa susunod, tumingin sa susunod na,
Tumingin sa susunod.
>> Ngunit sa lalong madaling nakikita mo backslash 0, ito loop-- line 9 hanggang 11-- tumitigil.
break mo sa labas ng habang loop, umaalis sa loob ng na variable n
ng isang kabuuang bilang ng lahat ng character sa string na nakita mo,
at dahil doon pag-print ito out.
Kaya sabihin subukan ito.
>> Hayaan akong sige at, nang walang gamit ang stirling function,
ngunit lamang gamit ang aking sariling homegrown bersiyon dito na tinatawag stirling, hayaan mo akong magpatuloy
at tumakbo stirling, i-type ng isang bagay tulad Zamyla, na alam ko in advance
ay anim na mga character.
Tayo'y makita kung ito gumagana.
Sa katunayan, ito ay anim.
Tayo'y subukan sa Rob Hayaan, tatlong character, tatlong mga character pati na rin, at iba pa.
Kaya na ang lahat na nangyayari sa ilalim ng hood.
At mapansin ang koneksyon, pagkatapos, na may unang linggo
ng klase, kung saan usapan natin ang tungkol isang bagay tulad ng abstraction,
kung saan ay lamang na ito layering ng mga ideya, o kumplikado, sa tuktok ng pangunahing mga prinsipyo.
Narito, uri ng kami ay naghahanap sa ilalim ng hood ng stirling,
kaya na magsalita, upang malaman kung, kung paano ito ay ipinatupad?
>> At hindi na namin maaaring muling ipatupad ito sa ating sarili.
Ngunit kami ay hindi na muling pagpunta upang muling ipatupad stirling.
Lamang kami ng pagpunta sa gamitin stirling upang
upang aktwal na makakuha ng ilang mga string haba.
>> Ngunit walang magic ilalim ng hood.
Kung alam mo na sa ilalim ng hood, ang isang string
ay lamang ng isang pagkakasunod-sunod ng mga character.
At na pagkakasunod-sunod ng mga character lahat ay maaaring ayon sa bilang direksiyon
sa bracket 0, bracket 1, bracket 2, at ikaw
alam na sa dulo ng isang string ay isang espesyal na karakter, maaari mong malaman kung
kung paano gawin ang karamihan ng anumang bagay sa isang programa, dahil ang lahat ng ito boils down sa
ay pagbabasa at pagsusulat memory.
Iyon ay, ang pagbabago at naghahanap sa memorya, o paglipat ng mga bagay
sa paligid sa memory, pag-print ng mga bagay sa screen, at iba pa.
>> Kaya sabihin na ngayong gamitin ang newfound unawa sa kung ano ang tunay na string
Isasama sa ilalim ng hood, at alisan ng balat pabalik sa isang iba pang layer
na hanggang ngayon hindi namin ay hindi papansin kabuuan.
Sa partikular, anumang oras na ipinatupad namin ang isang programa,
mayroon kaming ito linya ng code malapit sa tuktok deklarasyon main.
At kami tinukoy na int pangunahing walang bisa.
>> At na walang bisa sa loob ng panaklong ay sinasabi ang lahat ng oras na ito na ang pangunahing
mismo ay hindi gumawa ng anumang mga argumento.
Anumang input na pangunahing ay pagpunta upang makakuha ng mula sa mga gumagamit
ay na dumating mula sa ilang mga iba pang mga mekanismo, tulad ng get int,
o makakuha ng float, o makakuha ng string, o ilang iba pang function.
Ngunit ito ay lumiliko out na kapag sumulat ka ng isang programa,
maaari mong aktwal na tukuyin ang programang ito ay dapat
tumagal inputs mula sa mga tao sa command line mismo.
>> Sa ibang salita, kahit na namin kaya sa ngayon kung tumatakbo lamang ./hello kumusta
o katulad na mga programa, ang lahat ng mga iba pang mga programa na kami ay ginagamit,
na hindi namin ating sarili ay sumulat, kung na-pagkuha, tila,
command line arguments-- mga bagay tulad ng gumawa.
sabihin mo ng isang bagay tulad ng gumawa, at pagkatapos ng pangalawang salita.
O kalatungin, ikaw sabihin kumalatong, at pagkatapos ay isang pangalawang salita, ang pangalan ng isang file.
>> O kahit RM o CP, bilang maaari mong tumingin sa o ginagamit na
upang tanggalin o kopyahin ang mga file.
Ang lahat ng mga kumuha ng tinatawag na command line arguments--
karagdagang mga salita sa terminal prompt.
Ngunit hanggang ngayon, kami ating sarili ay hindi nagkaroon
ang luxury ng pagkuha ng input mula sa user kapag siya ang tunay na nagpapatakbo
mismong programa sa command line.
>> Ngunit maaari naming gawin iyon sa pamamagitan ng muling deklarasyon pangunahing paglipat ng pasulong, hindi tulad ng pagkakaroon ng
magpawalang-bisa sa panaklong, ngunit ang mga ito ng dalawang argumento
instead-- kang isang integer, at ang ikalawang bagay
bago, isang bagay na kami ay pagpunta sa tumawag isang array, isang bagay na katulad sa espiritu
sa kung ano ang nakita natin sa Scratch bilang isang listahan, ngunit isang array ng mga string, dahil kakailanganin namin sa lalong madaling panahon makita.
Ngunit sabihin makita ito sa pamamagitan ng Bilang halimbawa, bago namin
makilala kung ano mismo ang ibig sabihin nito.
>> Kaya kung pumunta ako sa CS50 IDE dito, ako ay wala nang mas maaga
at ipinahayag sa isang file na tinatawag na argv0.c ang mga sumusunod na template.
At mapansin ang tanging bagay na iba sa ngayon
ay na ko na nagbago void sa int argc string argv bukas bracket, malapit
bracket.
At mapansin para sa ngayon, may wala sa loob ng mga bracket.
>> Walang number.
At walang i, o n, o anumang iba pang sulat.
Tingin lang ako gamit ang square bracket para sa ngayon,
para sa mga kadahilanang kami ay dumating pabalik sa loob lamang ng ilang sandali.
>> At ngayon kung ano ako ng pagpunta sa gawin ay na ito.
Kung argc ay katumbas ay katumbas 2-- at isipin na katumbas equals
ay ang pagkakapantay-pantay operator paghahambing ang kaliwa at kanang para pagkakapantay-pantay.
Ito ay hindi ang assignment operator, na kung saan ay
ang nag-iisang katumbas sign, na nangangahulugan na kopya mula sa kanan sa kaliwa ilang mga halaga.
>> Kung argc ay katumbas ay katumbas ng 2, gusto kong sabihin nating, printf, hello, percents, bagong linya,
at pagkatapos ay plug in-- at narito ang mga bagong trick-- argv bracket 1, para sa mga dahilan
na kami ay bumalik sa sa isang sandali.
Iba Pa kung argc ay hindi katumbas 2, alam mo kung ano?
Sabihin pumunta lamang magpatuloy at, gaya ng dati, i-print out hello world na walang pagpapalit.
>> Kaya ito ay tila na kung argc, na kung saan nakatayo para sa argumento count, ay katumbas ng 2,
Pupunta ako upang i-print out kumusta bagay o iba pang.
Kung hindi man, sa pamamagitan ng default, ako upang i-print kumusta mundo.
Kaya kung ano ang ibig sabihin nito?
>> Well, hayaan mo akong magpatuloy at i-save ang file na ito, at pagkatapos ay gawin ang make argv0,
at pagkatapos ay ./argv0, ang Enter.
At sinasabi nito kumusta mundo.
Ngayon, kung bakit ay na?
>> Well, ito ay lumiliko out anumang oras mo magpatakbo ng isang programa sa command line,
ikaw ay pagpuno sa kung ano kami ay pangkalahatan tumawag ng argument vector.
Sa ibang salita, awtomatikong ang computer, ang operating system,
ay pagpunta sa ipasa sa iyong programa kanyang sarili ng isang listahan ng lahat ng mga salita
na ang mga tao na nag-type sa ang prompt, kung sakaling ikaw
ang programmer nais na gawin isang bagay na may impormasyon na iyon.
At sa kasong ito, ang tanging salita Ko na nai-type sa prompt ay ./argv0.
>> At kaya ang bilang ng mga argumento na na dumaan sa aking programa ay isa lamang.
Sa ibang salita, ang argument count, kung hindi man kilala bilang argc
dito bilang isang integer, ay isa lamang.
One, siyempre, ay hindi katumbas dalawa.
At kaya ito ay kung ano ang mga kopya, kumusta mundo.
>> Ngunit ipaalam sa akin tumagal ito sa isang lugar.
Hayaan sabihin sa akin, argv0.
At pagkatapos ay kung paano tungkol sa Maria?
At pagkatapos ay pindutin ang Enter.
>> At pansinin kung ano magically ang mangyayari dito.
Ngayon, sa halip ng hello world, mayroon akong nagbago ang pag-uugali ng programang ito
sa pamamagitan ng pagkuha ng input hindi mula get string o ilang iba pang function,
ngunit mula sa, tila, ang aking utos mismo, kung ano ang aking orihinal na nai-type in.
At maaari kong i-play ang laro na ito muli sa pamamagitan ng pagbabago nito sa Stelios, halimbawa.
>> At ngayon ako makita ang isa pang pangalan pa rin.
At dito, maaari kong sabihin Andi.
At maaari kong sabihin Zamyla.
At maaari naming i-play ang laro na ito sa lahat ng araw ang haba, lamang i-plug sa iba't ibang mga halaga,
habang ako'y magbigay ng eksakto dalawang salita sa prompt,
tulad na argc, ang aking argument bilangin, ay 2.
>> Huwag kong makita na pangalan plugged sa printf, per ang kundisyong ito dito?
Kaya tila namin na magkaroon ngayon ang nagpapahayag kakayahan
ng pagkuha input mula sa iba pang mekanismo, mula sa tinaguriang command line,
sa halip ng pagkakaroon na maghintay hanggang sa ang user ay tumatakbo ang programa,
at pagkatapos ay i-prompt sa kanya paggamit ng isang bagay tulad ng get string.
>> Kaya kung ano ay ito?
Argc, muli, ay lamang ng isang integer, ang bilang ng mga words-- arguments--
na ang mga user na ibinigay sa prompt, sa window terminal,
kabilang ang pangalan ng program.
Kaya aming ./argv0 ay, mabisa, pangalan ng program,
o kung paano ko patakbuhin ang program.
>> Na binibilang bilang isang salita.
Kaya argc ay 1.
Ngunit kapag ako magsulat ng Stelios, o Andi, o Zamyla, o Maria,
na nangangahulugan na ang argument count ay dalawa.
At kaya ngayon ay may dalawang salita lumipas in.
>> At pansinin, maaari naming patuloy na ito logic.
Kung ako talagang sabihin isang bagay tulad ng Zamyla Chan,
isang buong pangalan, at dahil doon pagpasa tatlong argumento sa kabuuan,
ngayon ito sabi ng default muli, dahil, siyempre, 3 ay hindi katumbas 2.
>> At kaya sa paraang ito, ang mayroon ako access sa pamamagitan ng argv ang bagong argument
na maaari naming technically tumawag kahit ano ang gusto namin.
Ngunit sa pamamagitan ng convention, ito ay argv at argc, buong galang.
Argv, argument vector, ay uri ng isang salitang kasingkahulugan para sa isang programming
tampok sa C na tinatawag na isang array.
>> Isang array ay isang listahan ng mga katulad na mga halaga likod, sa likod, sa likod, sa likod.
Sa ibang salita, kung ang isa ay dito mismo sa RAM, ang susunod na ang isa ay tama sa tabi nito,
at kanang tabi nito.
Ang mga ito ay hindi lahat ng dako ng lugar.
At na huli sitwasyon, kung saan bagay ay ang lahat sa ibabaw ng lugar sa memorya,
maaaring aktwal na maging isang malakas na tampok.
Ngunit kami ay bumalik sa na kapag kami makipag-usap tungkol fancier istruktura ng data.
Para sa ngayon, ang isang array ay lamang ng isang tipak ng magkadikit memory,
bawat isa sa kung saan ang mga elemento ay likod, sa likod, sa likod, sa likod,
at sa pangkalahatan ay ng parehong uri.
>> Kaya kung sa tingin mo tungkol sa, mula sa isang sandali ang nakalipas, kung ano ang isang string?
Well, ang isang string, tulad ng Zamyla, Z-A-M-Y-L-A, ay, technically,
lamang ng isang array.
Ito ay isang array ng mga character.
>> At kaya kung namin talagang gumuhit ito, bilang ako ginawa mas maaga, bilang isang tipak ng memory,
ito ay lumiliko out na ang bawat isa sa mga letra tumatagal ng hanggang isang byte.
At pagkatapos ay may mga espesyal na sentinel karakter, ang backslash 0,
o ang lahat ng walong 0 bits, na demarcates katapusan niyaong string.
Kaya ang isang string, ito ay lumiliko out, quote magpanipi string,
ay lamang ng isang array ng mga chara-- char pagiging isang tunay na uri ng data.
>> At ngayon argv, meanwhile-- sabihin bumalik sa programa.
Argv, kahit na nakikita natin ang salita string dito, ay hindi isang string mismo.
Argv, argument vector, ay isang array ng mga string.
>> Kaya tulad ng maaari kang magkaroon ng isang hanay ng mga character, maaari kang magkaroon ng mas mataas na antas,
isang array ng strings-- kaya, halimbawa, kapag ako nag-type ng isang sandali ago ./argv0
argv0, space Z-A-M-Y-L-A, inaangkin ko na argv ay nagkaroon ng dalawang mga string sa it-- ./argv0,
at Z-A-M-Y-L-A. Sa ibang salita, argc ay 2.
Bakit na?
>> Well, mabisa, kung ano ang nangyayari sa ay na ang bawat isa sa mga string
ay, siyempre, isang array ng mga character tulad ng dati, ang bawat isa na kung saan ang mga letra
tumatagal ng hanggang isang byte.
At huwag lituhin ang aktwal 0 sa pangalan ng program na may 0,
na nangangahulugan ang lahat ng 80 bits.
At Zamyla, samantala, ay pa rin din ng isang array ng mga character.
>> Kaya sa katapusan ng araw, ito tunay ganito ang hitsura nito sa ilalim ng hood.
Ngunit argv, sa pamamagitan ng likas na katangian ng kung paano main gawa, ay nagbibigay-daan sa akin upang wrap ang lahat ng mga ito
up sa, kung ikaw ay, isang mas malaking array na, kung kami ay bahagyang higit gawing simple
kung ano ang larawan ay ganito ang hitsura at di ninyo ginagawa medyo babatakin sa scale up doon,
array na ito ay lamang ng laki 2, ang unang elemento ng na naglalaman ng isang string,
ang pangalawang elemento ng na naglalaman ng isang string.
At ang kapalit, kung ikaw uri ng mag-zoom in sa bawat
sa mga string, kung ano ang iyong makita sa ilalim ng hood
ay na ang bawat string ay lamang isang array ng mga character.
>> Ngayon, tulad ng sa mga string, nagawa naming upang makakuha ng access
sa i-ika na character sa isang string gamit na square bracket pagtatanda.
Katulad nito, sa arrays sa pangkalahatan, maaari naming
gamitin square bracket pagtatanda upang makakuha ng sa anumang bilang ng mga string sa isang array?
Halimbawa, hayaan mo akong sige, at gawin ito.
>> Hayaan akong magpatuloy at lumikha argv1.c, na kung saan ay isang maliit na naiiba ngayon.
Sa halip ng paglagay ng tsek para argc2, Pupunta ako sa halip na gawin ito.
Para int nakukuha ko 0, ako ay mas mababa kaysa argc, ako plus plus,
at pagkatapos ay i-print out sa loob ng mga ito, porsiyento s, bagong linya, at pagkatapos ay
argv bracket i.
>> Kaya sa ibang salita, hindi ako pagharap sa indibidwal na mga character sa sandaling ito.
Argv, pati na ipinahiwatig sa pamamagitan ng mga walang laman na parisukat tirante sa kanan ng pangalan argv,
nangangahulugan argv ay isang array ng mga string.
At argc ay lamang ng isang int.
>> Ang linya dito, 6, ay sinasabi set i kasing-halaga sa 0.
Bilangin ang lahat ng paraan hanggang sa, ngunit hindi kabilang ang, argc.
At pagkatapos ay sa bawat pag-ulit, i-print ang isang string.
Ano string?
>> Ang i-th string sa argv.
Kaya samantalang bago ako ay gamit ang square bracket
notation upang makakuha ng sa ith character sa isang string, ngayon
Ako gamit ang square bracket pagtatanda upang makakuha ng sa ith string sa isang array.
Kaya ito ay uri ng isang layer itaas, conceptually.
>> At kaya kung ano ang malinis at maayos na tungkol sa mga ito program ngayon, kung ako sumulat ng libro argv1,
at pagkatapos ay gawin ./argv1, at pagkatapos i-type sa isang bagay tulad foo bar baz,
na kung saan ay ang tatlong default salita na ang isang computer siyentipiko umabot para sa anumang oras
siya pangangailangan ng ilang placeholder salita, at pindutin ang Enter, ang bawat isa sa mga salitang ito,
kabilang ang pangalan ng programa, na kung saan ay sa argv sa unang lokasyon,
nagtatapos up na naka-print nang paisa-isa.
At kung babaguhin ko ito, at sinasabi ko isang bagay tulad ng argv1 Zamyla Chan,
makuha namin ang lahat ng tatlong ng mga salita, na kung saan ay argv0,
argv1, argv2, dahil sa ito kaso argc, ang count, ay 3.
>> Ngunit kung ano ang malinis at maayos ay kung naiintindihan mo na argv ay isang array ng mga string,
at sa iyo na maunawaan na ang isang string ay isang array ng mga character,
maaari naming tunay na uri ng gamitin ang square bracket pagtatanda maraming beses
upang pumili ng isang string, at pagkatapos ay piliin isang character sa loob ng string,
diving sa mas malalim ang mga sumusunod.
Sa halimbawang ito, hayaan mo akong pumunta magpatuloy at itawag sa argv2.c.
At sa halimbawang ito, hayaan mo akong magpatuloy at gawin ang mga following-- para sa int i makakuha ng 0,
i Mababa sa argc, i plus plus, tulad ng dati.
Kaya sa ibang words-- at ngayon ito ay nakakakuha ng asawa sapat.
Pagkatapos ay ako pagpunta sa sabihin umulit sa mga string sa argv,
bilang isang puna sa aking sarili.
At pagkatapos ay ako pagpunta sa magkaroon ng isang nakapugad para sa loop, kung saan mo marahil
ginawa, o itinuturing na paggawa, sa simula, kung saan
Pupunta ako sa sabihin int ako hindi pagpunta sa gumamit i muli,
dahil hindi ko nais na anino, o uri ng patungan ang umiiral na i.
>> Ako pagpunta sa, sa halip, sabihin j, dahil na ang aking go sa variable pagkatapos i,
kapag ako makatarungan trying sa bilangin simple numero.
Para j nakakakuha 0-- at din, n, ay pagpunta sa makuha ang istrikto haba ng argv bracket i,
kaya hangga't j ay mas mababa sa m, j plus plus, gawin ang sumusunod.
At narito ang mga kagiliw-giliw na bahagi.
>> I-print out ng isang character at isang bagong linya, plugging sa argv bracket i, bracket j.
OK, kaya hayaan mo akong magdagdag ng ilang mga komento dito.
Umulit sa letra sa kasalukuyang string,
print j-ika na character sa i-ika string.
Kaya ngayon, sabihin isaalang-alang ano ang mga komentong ito ibig sabihin.
>> Umulit sa ibabaw ng mga string in argv-- kung gaano karaming
string ay sa argv, na kung saan ay isang array?
Argc marami, kaya ako iterating mula sa i katumbas 0 hanggang sa argc.
Samantala, kung gaano karaming karakter ay sa i-ika string sa argv?
>> Well, upang makakuha ng sagot na yaon, Ko na lang tawag string haba
sa pag-aalaga kasalukuyang string ko tungkol sa, na kung saan ay argv bracket i.
At ako pagpunta upang pansamantalang mag-imbak na halaga sa n, para lamang sa mga layuning pang-cache,
tandaan ito para sa kahusayan.
At pagkatapos ay ako pagpunta magpasimula j sa 0, panatilihin ang pagpunta hanggang j ay mas mababa sa n,
at sa bawat pag-ulit increment j.
>> At pagkatapos ay sa dito, per ang aking mga puna sa linya 12,
i-print ang isang character, sinundan sa pamamagitan ng isang bagong linya,
partikular argv bracket i ay nagbibigay sa akin ang i-ika string
in argv-- kaya ang unang salita, ang pangalawang salita, ang ikatlong salita, kahit na ano.
At pagkatapos j dives sa mas malalim, at nakakakuha sa akin ang j-ika-character ng salitang iyon.
At kaya, sa epekto, maaari mong ituring ang argv bilang isang multi-dimensional,
bilang isang dalawang-dimensional, array, kung saan ang bawat salita uri ng hitsura
tulad nito sa iyong isip mata, at bawat karakter
ay uri ng binubuo sa isang haligi, kung na tumutulong.
>> Sa katotohanan, nang kami ay mang-ulol ito bukod sa hinaharap na linggo,
ito ay pagpunta sa maging isang maliit na mas sopistikadong kaysa sa na.
Ngunit maaari mo talagang isipin na, sa ngayon,
bilang lamang ito ng dalawang-dimensional array, kung saan ang isang antas ng ito
ay ang lahat ng mga string.
At pagkatapos ay kung ka sumisid sa mas malalim, ikaw ay maaaring makakuha ng sa indibidwal na mga character
pawang sa pamamagitan ng paggamit notation na ito dito.
>> Kaya kung ano ang net effect?
Hayaan akong sige at gumawa argv2-- darn ito.
Nagkamali ako dito.
Kataon lamang deklarasyon ang library function stirling.
Kaya lahat ng oras na ito, ito ay marahil naaangkop
na kami ay uri ng pagtatapos eksakto kung saan kami nagsimula.
>> I screwed up, nang kataon lamang deklarasyon library function stirling.
OK, maghintay ng isang minuto.
Natatandaan ko na, lalo na dahil ito ay karapatan dito.
kailangan kong isama string.h in ang bersyon na ito ng programa.
>> Hayaan akong sige at isama string.h, liban sa, sige
at mag-recompile argv2.
At ngayon, dito kami pumunta, gumawa argv2, ang Enter.
At bagaman ito ay isang maliit misteriyoso sa unang tingin,
mapapansin na, sa katunayan, kung ano ay naka-print ay dot argv2.
>> Ngunit kung ako type ng ilang mga salita pagkatapos ng prompt, tulad argv2 Zamyla Chan,
Ipasok, din ng isang maliit misteriyoso sa unang tingin.
Ngunit kung mag-scroll namin back up, ./argv2 Z-A-M-Y-L-A C-H-A-N.
Kaya na iterated namin sa paglipas ng bawat salita.
At, sa turn, na iterated kami ay may higit bawat karakter sa loob ng isang salita.
>> Ngayon, pagkatapos ng lahat ng ito, mapagtanto na mayroong
isa sa iba pang detalye nakaya naming uri ng hindi papansin ito buong oras.
lamang teased namin bukod sa kung ano ni main inputs ay maaaring maging?
Paano ang tungkol sa output ni main?
>> Lahat ng oras na ito, kami ay lamang na kopyahin at i-dikit
ang salita int sa harap ng main, bagaman maaari mong makita sa online,
minsan hindi tama sa mga mas lumang mga bersyon ng C at compilers, na sinasabi nila na walang bunga,
o wala sa lahat.
Ngunit, sa katunayan, para sa mga bersyon ng C na aming ginagamit,
C 11, o 2011, napagtanto na ito ay dapat na int.
At ito ay dapat maging alinman sa walang bisa o argc at argv dito.
>> Ngunit bakit int main?
Ano ito talaga bumabalik?
Well, ito ay lumiliko out ang lahat ng oras na ito, anumang oras na ikaw na nakasulat sa isang programa main
ay laging bumabalik isang bagay.
Ngunit ito ay nai-paggawa nito lihim.
>> isang bagay na ay isang int, bilang line 5 nagmumungkahi.
Ngunit ano int?
Well, mayroong ito convention sa programming,
kung saan kung wala ay gone mali at lahat ay mabuti,
mga programa at mga function sa pangkalahatan return-- medyo counterintuitively--
0.
0 sa pangkalahatan ay nagpahayag ng lahat ay mabuti.
Kaya kahit na sa tingin mo ng ito bilang huwad na sa maraming mga konteksto,
ito ang tunay na sa pangkalahatan ay nangangahulugan ng isang magandang bagay
>> Samantala, kung ang isang programa ay nagbabalik 1, o negatibong 1, o 5, o negatibong 42,
o anumang di-0 halaga, na sa pangkalahatan ay nagpahayag
na ang isang bagay ay nawala maling.
Sa katunayan, sa iyong sariling Mac o PC, maaari kang magkaroon ng tunay na makikita
isang mensahe ng error, kung saan ito sabi ng isang bagay o iba pang, error
code negatibong 42, o error code 23, o isang bagay tulad na.
Numerong iyon ay karaniwang lamang ng isang pahiwatig sa programmer, o ng kumpanya
na ginawa ang software, ano ang nangyaring mali at kung bakit,
upang maaari silang tumingin sa pamamagitan ng kanilang mga babasahin o code,
at malaman kung ano ang error tunay na ibig sabihin.
Ito ay karaniwang hindi kapaki-pakinabang sa amin end user.
>> Ngunit kapag main returns 0, ang lahat ay mabuti.
At kung hindi mo tukuyin ano main dapat bumalik,
ay ito lamang ang awtomatikong bumalik 0 para sa iyo.
Ngunit bumabalik bagay sino pa ang paririto ay talagang kapaki-pakinabang.
>> Sa ganitong pangwakas na programa, hayaan mo akong sige at tawagan ito exit.c,
at ipakilala ang huling ng araw na ito mga paksa, na kilala bilang isang error code.
Hayaan akong sige at isama ang aming pamilyar file up tuktok, gawin int pangunahing.
At oras na ito, sabihin gawin int argc, string argv, at sa aking mga bracket
upang magpahiwatig na ito ay sa array.
At pagkatapos ay hayaan mo akong lamang gawin ng isang katinuan check.
Oras na ito, kung argc ay hindi katumbas 2, pagkatapos ay alam mo kung ano?
Kalimutan na ninyo.
I am pagpunta sa sabihin na, hey, user, ikaw ay nawawala command line argument
backslash n.
>> At pagkatapos na ang lahat.
Gusto kong lumabas.
I am pagpunta sa preemptively, at prematurely talaga, return
isang bagay na iba kaysa sa bilang 1.
Ang pumunta sa halaga para sa unang error na maaaring mangyari ay 1.
Kung ikaw ay may ilang mga iba pang maling sitwasyon na maaaring mangyari,
kumbaga return 2 o bumalik 3, o marahil kahit na mga negatibong 1 o negatibong 2.
>> Ito ay lamang exit code na, sa pangkalahatan,
lamang kapaki-pakinabang sa programista, o ang kumpanya na pagpapadala ng software.
Ngunit ang katotohanan na ito ay hindi 0 ay kung ano ang mahalaga.
Kaya kung sa programang ito, gusto kong garantiya na ang program na ito lamang
gumagana kapag ang gumagamit ay nagbibigay sa akin may isang argument count ng dalawa,
ang pangalan ng programa, at ilang iba pang salita, ang maaari kong ipatupad ng mas maraming bilang mga sumusunod,
sumigaw sa mga user na may printf sinasabi, nawawala command line argument,
bumalik 1.
Iyon ay lamang kaagad umalis sa programa.
>> Lamang kung argc ay katumbas ng 2 kami makakuha ng pababa dito, kung saang punto ako pagpunta sa sabihin,
kumusta porsiyento s, backslash n, argv1.
Sa ibang salita, ako hindi pagsunod argv 0,
na kung saan ay lamang ang pangalan ng programa.
gusto kong i-print out hello, kuwit, ang pangalawang salita na ang mga tao na-type.
At sa kasong ito sa line 13, lahat ay mabuti.
>> Alam ko na argc ay 2 logically mula sa programang ito.
Ako pagpunta sa sige at bumalik 0.
Bilang isang tabi, panatilihin sa isip na ito ay totoo sa Scratch pati na rin.
>> Logically, maaari kong gawin ito at encapsulate ang mga linyang ito
ng code sa ibang tao sugnay dito.
Ngunit iyon lamang ang uri ng mga hindi kinakailangan indent aking code.
At gusto kong gumawa ng super malinaw na kahit na ano,
sa pamamagitan ng default, hello isang bagay ay makakakuha ng naka-print,
kaya hangga't ang user ay cooperates.
>> Kaya ito ay napaka-pangkaraniwan na gamitin isang kondisyon, lamang ng isang kung,
upang mahuli ang ilang maling sitwasyon, at pagkatapos ay lalabas.
At pagkatapos, kaya mahaba ang lahat ay well, at gumawa na ng ibang tao,
ngunit na lang ay ang code sa labas na kung, dahil sa ito ay
katumbas sa ito partikular na kaso, logically.
Kaya ako bumabalik 0, lamang upang explicitly maging tanda lahat ay mabuti.
>> Kung tinanggal ko ang pagbabalik 0, gagawin ito awtomatikong ipinapalagay para sa akin.
Ngunit ngayon na ako bumabalik isa sa hindi bababa sa kasong ito,
Ako pagpunta sa, para sa mabuting panukala at kaliwanagan, bumalik 0 sa kasong ito.
Kaya ngayon hayaan mo akong magpatuloy at gumawa exit, na kung saan ay isang perpektong segue sa makatarungan iwan.
>> Ngunit gumawa exit, at papagpaalamin mo ako magpatuloy at gawin ./exit, ang Enter.
At ang program yelled sa akin, nawawala command line argument.
OK, hayaan mo akong makipagtulungan.
>> Hayaan akong sa halip na gawin ./exit, David, ang Enter.
At ngayon sinasabi nito, hello David.
At hindi na karaniwan mong nais makita ito.
>> Ngunit ito ay lumiliko out na mayroong isang espesyal na paraan sa Linux upang aktwal na makita
sa kung ano ang exit code ng isang programa lumabas.
Minsan sa isang graphical mundo tulad ng Mac OS o Windows,
mo lamang makita ang mga numerong ito kapag ang isang error na mensahe pops up sa screen
at ang programmer Ipinapakita sa iyo ng numerong iyon.
Ngunit kung gusto naming upang makita kung ano ang mga error message ay, maaari naming gawin ito here--
kaya ./exit, Ipasok, print nawawala command line argument.
>> Kung ako ngayon gawin echo $ ?, na kung saan ay ridiculously cryptic naghahanap.
Ngunit $?
ay ang mahiwagang bulong na nagsasabing, hey, computer,
sabihin sa akin kung ano ang nakaraang exit code programa ay.
At pindutin ko ang Enter.
nakikita ko 1, dahil na kung ano ako sinabi sa aking pangunahing pag-andar upang bumalik.
>> Samantala, kung gagawin ko ./exit David, at pindutin ang Enter, nakikita ko, hello David.
At kung ako ngayon gawin echo $ ?, nakikita ko kumusta 0.
At kaya ito ay talagang maging mahalagang impormasyon
sa konteksto ng debugger, hindi kaya magkano na ikaw ay, ang tao, ang inaalintana.
Ngunit ang debugger at iba pang mga programa gagamitin namin ito semestre
ay madalas na tumingin sa numerong iyon, kahit na ito ay isang uri ng nakatago ang layo
maliban kung titingnan mo para sa mga ito, upang matukoy kung o hindi ang isang programa
pagpapatupad ay tama o mali.
>> At sa gayon ay nagdudulot sa amin sa ito, sa dulo ng araw.
Sinimulan namin ngayon sa pamamagitan ng pagtingin sa debugging, at siya namang sa kurso
mismo, at pagkatapos ay mas kawili-wili, technically sa ilalim ng hood
sa kung ano ang string ay, na huling week lang namin kinuha para sa ipinagkaloob,
at tiyak na kinuha ang mga ito para sa ipinagkaloob sa scratch.
>> Pagkatapos namin tumingin sa kung paano namin maaaring ma-access indibidwal na mga character sa isang string,
at pagkatapos ay muli kinuha ng isang mas mataas na antas tumingin sa mga bagay, ang pagtingin sa kung paano well--
kung nais namin upang makakuha ng sa mga indibidwal na mga elemento sa isang listahan tulad ng istraktura,
ay hindi maaaring gawin namin na may maramihang mga string?
At maaari namin sa command line argumento.
Ngunit this picture dito na lamang kahon ay demonstrative ng pangkalahatang ideya
ng isang array, o ng isang listahan, o isang vector.
At depende sa konteksto, ang lahat ng mga salitang ito
ibig sabihin bahagyang magkaibang mga bagay.
Kaya sa C, lamang kami ay pagpunta upang makipag-usap tungkol sa isang array.
At isang array ay isang tipak ng memorya, bawat isa sa kanino ay
elemento ay magkadikit, likod, sa likod, sa likod, sa likod.
>> At yaong mga sangkap na ito ay, sa pangkalahatan, ng parehong uri ng data, character,
karakter, karakter, karakter, o string, string, string, string, o int,
int, int, kahit ano ito ay sinusubukan naming store.
Ngunit sa pagtatapos ng araw, ito ay kung ano ang mukhang conceptually.
Ikaw ay pagkuha ng iyong memory ng computer o RAM.
At ikaw ay larawang inukit ito sa identically sized box, ang lahat ng na
ay bumalik, upang i-back, upang likod, upang i-back sa ganitong paraan.
>> At kung ano ang maganda tungkol ideya na ito, at ang katotohanan
na maaari naming ipahayag ang mga halaga sa ganitong paraan sa unang ng aming mga istraktura ng data
sa klase, ay nangangahulugan na maaari naming simulan ang upang malutas ang problema sa code
na dumating kaya intuitively sa linggo 0.
Ikaw pagpapabalik ang telepono book halimbawa, kung saan
ginamit namin ang isang hatiin at lupigin, o isang binary search algorithm,
sa suriing mabuti sa pamamagitan ng isang buong grupo ng mga pangalan at mga numero.
Ngunit kami ipinapalagay, pagpapabalik, na na phone book ay na pinagsunod-sunod,
na ang isang tao sino pa ang paririto ay na korte out-- bibigyan ng isang listahan ng mga pangalan
at numbers-- kung paano sa abakada ang mga ito.
At ngayon na sa C namin, masyadong, ay may kakayahan
upang mag-ipon ng mga bagay out, hindi pisikal sa isang phone book
ngunit halos sa isang computer memory, magagawa naming sa susunod na linggo
upang ipakilala muli this-- unang ng aming mga istruktura ng data sa isang array
ngunit mas mahalaga, aktwal na computer agham algorithm ipinatupad
sa code, na kung saan maaari kaming mag-imbak data sa istruktura tulad nito,
at pagkatapos ay simulan upang manipulahin ito, at upang aktwal na malutas ang mga problema sa mga ito,
at upang bumuo ng sa itaas ng na, sa huli, mga programa sa C,
sa sawa, sa JavaScript, querying database sa SQL?
>> At kami na ang lahat ng mga iba't ibang mga ideya interlock.
Ngunit sa ngayon, isipin na ang domain na namin ipinakilala sa araw na
ay ang bagay na ito dito, at sa mundo ng cryptography.
At kabilang sa mga susunod na mga problema mo ang iyong sarili ay malutas ay ang sining ng cryptography,
scrambling at de-scrambling impormasyon, at ciphering
at deciphering teksto, at sa pag-aakala sa huli
na ikaw ngayon alam kung ano ay sa ilalim ng hood
kaya na kapag nakita mo o tumanggap isang mensahe tulad nito, ikaw
maaaring ang iyong sarili maintindihan ito.
Ang lahat ng ito, at higit pa sa susunod na pagkakataon.
>> [Video playback]
>> -Mover Kadarating pa lamang.
Pupunta ako upang pumunta pagbisita kanyang kolehiyo propesor.
Yep.
Hi.
Ikaw.
Maghintay!
David.
Tingin lang ako sinusubukan upang malaman kung ano ang nangyari sa iyo.
Please, kahit ano ay maaaring makatulong.
Kayo ang kanyang college kasama sa kuwarto, ay hindi mo?
Ikaw ay doon sa kanya kapag siya tapos na ang CS50 proyekto?
>> [MUSIC nagpe-play]
>> -Na Ay CS50.
>> Gustung-gusto ko ang lugar na ito.
>> -Kumain Ka.
Kami ay pagpunta sa labas ng negosyo.
>> [END-playback]