[Speel van musiek] David J. MALAN: Goed. Dit is CS50, en dit is die begin van Week 2. En jy sal dit oor te herroep Die afgelope paar weke, Ons het al die bekendstelling van die rekenaar wetenskap en het op sy beurt, programmering. En ons het die storie by wyse van Kras, wat grafiese taal van MIT se media Lab. En dan meer onlangs, verlede week, het ons stel 'n higher-- n laer-vlak taal bekend soos C, iets wat suiwer tekstuele. En, inderdaad, laaste keer dat ons verken binne daardie konteks 'n aantal konsepte. Dit, onthou, was die heel eerste program het ons gekyk na. En hierdie program, eenvoudig, druk uit, "Hallo, wêreld." Maar daar is so baie oënskynlike magie aangaan. Daar is dié # include met hierdie hoek tussen hakies. Daar is Int. Daar is (void). Daar is tussen hakies, krullerige draadjies, semi-dubbele punte, en soveel meer. En so, onthou dat ons bekendgestel Scratch sodat ons kan, verkieslik, sien verby dat sintaksis, die dinge wat regtig nie alles wat intellektueel interessante, maar vroeg is, absoluut, 'n bietjie lastig om te draai jou gedagtes rondom. En, inderdaad, een van die mees algemene dinge vroeg in 'n programmeertaal klas, veral vir diegene wat minder gemaklik, is om ontslae te gefrustreerd deur en geskakel deur sekere sintaktiese foute, nie om logiese foute te noem. En so tussen ons doelwitte vandag, in werklikheid, sal wees om jou toe te rus met 'n paar probleemoplossing tegnieke vir hoe om hulself beter te los probleme in die vorm van debugging. En jy sal onthou ook dat die omgewing wat ons bekendgestel laaste keer genoem CS50 IO. Dit is web-gebaseerde sagteware wat kan 'n program in die wolk, om so te praat, terwyl al jou lêers tesame, as ons weer vandag. En onthou dat ons herbesoek hierdie onderwerpe hier, onder hulle funksies, en loops, en veranderlikes, en Boolse uitdrukkings, en voorwaardes. En eintlik nog 'n paar wat ons vertaal uit die wêreld van Scratch om die wêreld van C. Maar die fundamentele gebou blokke, so te sê, was regtig nog steeds dieselfde verlede week. Trouens, ons regtig net 'n verskillende legkaart stuk, as jy wil. In plaas van dat pers red blok, ons plaas het printf, wat hierdie funksie in C wat laat jou toe om iets te druk en formateer dit op die skerm. Ons lei die CS50 Biblioteek, waar jy het nou tot jou beskikking get_char, en get_int, en get_string, en 'n paar ander funksies soos Wel, via wat jy kan kry insette uit eie sleutelbord van die gebruiker. So het ons dan ook 'n blik op dinge soos these- Bool, en kar, en dubbel, vlot, int, long_long string. En daar is selfs ander soorte data in C. Met ander woorde, as jy verklaar 'n veranderlike om 'n paar waarde te stoor, of wanneer jy implementeer 'n funksie wat terug 'n bietjie waarde, jy kan wat spesifiseer tipe waarde wat. Is dit 'n string, soos 'n volgorde van die karakters? Is dit 'n nommer, soos 'n heelgetal? Is dit 'n drywende punt waarde, en dies meer? So in C, in teenstelling met nuuts af, het ons eintlik begin om te spesifiseer watter soort data ons terugkeer of die gebruik van. Maar, natuurlik, ons het ook in sommige fundamentele grense van die rekenaar. En in die besonder, hierdie taal C, onthou dat ons het 'n blik op heelgetal oorloop, die werklikheid As jy net 'n eindige hoeveelheid geheue of, in die besonder, 'n beperkte aantal bisse, kan jy net tel so hoog. En so het ons gekyk na die voorbeeld hier waardeur 'n toonbank in 'n vliegtuig,, eintlik, as lank genoeg hardloop sou oorloop en lei tot 'n sagteware 'n werklike fisiese potensiaal fout. Ons het ook gekyk na drywende punt onakkuraatheid, die werklikheid wat met net 'n beperkte aantal bisse, of dit nou 32 of 64, jy kan net spesifiseer soveel nommers na 'n desimale punt waarna jy begin vaag te kry. So byvoorbeeld, een-derde in die wêreld hier, in ons menslike wêreld, ons weet, is net 'n oneindige aantal van 3s nadat die desimale punt. Maar 'n rekenaar kan nie noodwendig verteenwoordig 'n oneindige aantal getalle As jy net toelaat dat dit 'n eindige hoeveelheid inligting. So nie net het ons toerus met 'n groter krag in terme van hoe jy kan druk jouself op 'n sleutelbord in terme van ontwikkeling, Ons beperk ook wat jy kan eintlik doen. En inderdaad, foute en foute kan ontstaan ​​as gevolg van hierdie soort kwessies. En inderdaad, onder die onderwerpe vandag gaan onderwerpe soos ontfouting wees en eintlik op soek onder die enjinkap hoe dinge is ingestel verlede week is eintlik geïmplementeer sodat jy 'n beter verstaan ​​beide die vermoëns van en die beperkings van 'n taal soos C. En in die waarheid, sal ons skil terug die lae van die eenvoudigste van datastruktuur, iets genaamd 'n skikking, wat Kras gebeur met 'n skakel "lys." Dit is 'n bietjie anders in daardie konteks. En dan sal ons ook in te voer een van die eerste van ons domein-spesifieke probleme in CS50, die wêreld van kriptografie, die kuns van die skommeling of in syfering inligting so dat jy geheime boodskappe kan stuur en ontsyfer geheime boodskappe tussen twee persone, A en B. So voordat ons oorgang om daardie nuwe wêreld, Kom ons probeer om jou toe te rus met 'n paar tegnieke waarmee jy kan skakel of te verminder ten minste 'n paar van die frustrasies dat jy waarskynlik ondervind oor die afgelope week alleen. Trouens, voor jy such-- sommige van jou eerste probleme in C. En die kans is, As jy soos ek, die eerste keer jy probeer om uit te voer 'n program, selfs as jy dink logies die program is eenvoudig, jy dalk baie goed getref 'n muur, en die samesteller is nie van plan om saam te werk. Maak of klang is nie van plan om werklik te doen jou bied. En hoekom sou dit wees? Wel, laat ons 'n blik op, miskien, 'n eenvoudige program. Ek gaan om voort te gaan en behalwe hierdie in 'n lêer met opset genoem buggy0.c, want ek weet dat dit word gebrekkig in advance. Maar ek kan nie besef dat as hierdie is die eerste of tweede of derde program dat ek eintlik maak myself. So ek gaan om voort te gaan en tik, int main (void). En dan binnekant van my krullerige draadjies, 'n baie bekende ( "hallo, world-- agteroorskuinsstreep, N ") - en 'n kommapunt. Ek het die lêer gestoor. Nou gaan ek om te gaan om my terminale venster en tipe make buggy0, want weer, die naam van die lêer vandag buggy0.c. So ek tik te maak buggy0, Tik. En, o, gosh, onthou van verlede tyd dat geen fout boodskappe is 'n goeie ding. Sodat daar geen produksie is 'n goeie ding. Maar hier het ek duidelik sommige aantal foute. Dus is die eerste lyn van uitset nadat tik maak buggy0, onthou, is redelik uitgebreide uitset klang se. Onder die enjinkap, CS50 IO is ingestel 'n hele klomp van die gebruik opsies met hierdie samesteller sodat jy nie hoef om te dink oor hulle. En dit is al wat eerste reël middel wat begin met klang. Maar daarna het die probleme begin om hul verskyning maak. Buggy0.c op lyn 3, karakter 5 Daar is 'n groot, rooi fout. Wat is dit? Implisiet verklaar biblioteek funksie printf met tipe int (const char *, ...) [-Werror]. Ek bedoel, is dit baie vinnig kry baie arcane. En in elk geval, op die eerste oogopslag, sou ons nie verwag dat jy die verstaan geheel van die boodskap. En so een van die lesse vir vandag gaan te wees om te probeer aan om in kennis patrone, of 'n soortgelyke dinge, om foute wat jy mag hê teëgekom in die verlede. So laat ons net terg uitmekaar daardie woorde wat vertroud te kyk. Die groot, rooi fout is duidelik simbolies van iets verkeerd. implisiet verklaar biblioteek funksie printf. So selfs as ek nie heeltemal verstaan ​​wat implisiet verklaar biblioteek funksie middel, die probleem sekerlik betrekking het op een of ander manier printf. En die bron van die probleem het te doen met verklaar dit. Waarby 'n funksie is noem dit vir die eerste keer. En ons gebruik die terminologie verlede week verklaar prototipe n funksie se óf met een lyn aan die bokant van jou eie lêer of in 'n sogenaamde kop lêer. En in watter lêer het ons sê verlede week dat printf is quote, unquote, verklaar? In watter lêer is sy prototipe? So as jy onthou, die heel eerste ding wat ek getikte, byna elke program laaste time-- en per ongeluk 'n oomblik gelede begin tik myself-- was hierdie een here-- hash-- # include