1 00:00:00,000 --> 00:00:00,980 2 00:00:00,980 --> 00:00:04,410 >> [Musik spiller] 3 00:00:04,410 --> 00:00:11,147 4 00:00:11,147 --> 00:00:12,230 David J. MALAN: Okay. 5 00:00:12,230 --> 00:00:16,440 Dette er CS50, og dette er slutningen af ​​uge 2. 6 00:00:16,440 --> 00:00:18,480 Så i dag, vi vil at fortsætte vores udseende 7 00:00:18,480 --> 00:00:21,150 på, hvordan vi repræsenterer tingene under hood-- bevæger sig væk 8 00:00:21,150 --> 00:00:23,520 fra numre som heltal og kommeværdier 9 00:00:23,520 --> 00:00:26,810 og fokus på strygere og i sidste ende mere interessante programmer. 10 00:00:26,810 --> 00:00:30,140 Men vi vil også tage et kig på en par domæne-specifikke problems-- 11 00:00:30,140 --> 00:00:33,620 hvoraf den første vil være involverer kryptografi, 12 00:00:33,620 --> 00:00:36,570 kunsten scrambling oplysninger hvor du ser ovenfor her 13 00:00:36,570 --> 00:00:41,480 er et billede af Radio Orphan Annie hemmelig dekoder ring fra gårsdagens. 14 00:00:41,480 --> 00:00:46,490 >> Det er faktisk meget primitiv form og børnevenlig form for cryptopgraphy 15 00:00:46,490 --> 00:00:50,590 hvorved denne ring har to disks-- en indvendig og en uden. 16 00:00:50,590 --> 00:00:54,740 Og ved at dreje en af ​​dem, du kan væsentlige line up breve Like A 17 00:00:54,740 --> 00:00:59,520 gennem Z med andre bogstaver ligesom B gennem A. Med andre ord, 18 00:00:59,520 --> 00:01:03,730 du kan bogstaveligt talt rotere alfabetet, derved kommer op med en kortlægning fra 19 00:01:03,730 --> 00:01:07,820 breve til breve, således at hvis du ønskede at sende en hemmelig besked 20 00:01:07,820 --> 00:01:11,820 til en som Annie, kan du skrive ned din besked og drej 21 00:01:11,820 --> 00:01:15,370 bogstaverne, hvorved hvis du mener at sige "A", du i stedet sige "B" 22 00:01:15,370 --> 00:01:17,280 du mener at sige "B" du i stedet sige "C" - 23 00:01:17,280 --> 00:01:20,240 eller noget lidt mere smart end at-- og så i sidste ende, 24 00:01:20,240 --> 00:01:24,630 så længe Annie har denne dekoder ring, kan hun afkode meddelelsen. 25 00:01:24,630 --> 00:01:28,540 Nu kan du huske, i virkeligheden, at dette blev anvendt i en meget berømt film, 26 00:01:28,540 --> 00:01:31,140 spiller ad nauseum under juletiden. 27 00:01:31,140 --> 00:01:32,650 Lad os tage et kig her. 28 00:01:32,650 --> 00:01:35,294 29 00:01:35,294 --> 00:01:37,210 Ralphie Parker: "Lad det kendt af alle i sammendrag 30 00:01:37,210 --> 00:01:41,000 at Ralph Parker herved udpeges et medlem af Little Orphan Annie Secret 31 00:01:41,000 --> 00:01:44,860 Circle og er berettiget til alle de æresbevisninger og fordele forekommende dertil. " 32 00:01:44,860 --> 00:01:47,410 >> Ralphie Parker (indtaling): Signeret Little Orphan Annie. 33 00:01:47,410 --> 00:01:50,070 Medunderskrives, Pierre André! 34 00:01:50,070 --> 00:01:51,490 I blæk. 35 00:01:51,490 --> 00:01:55,494 Honors og fordele, allerede i en alder af ni. 36 00:01:55,494 --> 00:01:57,402 >> [Musik spiller] 37 00:01:57,402 --> 00:02:00,470 >> [RADIO CHATTER] 38 00:02:00,470 --> 00:02:01,470 Ralphie Parker: Kom nu. 39 00:02:01,470 --> 00:02:02,344 Lad os komme videre med det. 40 00:02:02,344 --> 00:02:06,029 Jeg har ikke brug for alt det jazz om smuglere og pirater. 41 00:02:06,029 --> 00:02:08,820 Radiovært: Lyt i morgen nat for den afsluttende eventyr 42 00:02:08,820 --> 00:02:11,060 af The Black Pirate Ship. 43 00:02:11,060 --> 00:02:14,740 Nu er det tid til Annies Hemmelig besked til dig medlemmer 44 00:02:14,740 --> 00:02:17,110 af Secret Circle. 45 00:02:17,110 --> 00:02:20,700 Husk børn, kun medlemmer af Annies Secret Circle 46 00:02:20,700 --> 00:02:23,270 kan afkode Annies hemmelig besked. 47 00:02:23,270 --> 00:02:27,270 >> Husk, at Annie afhængig af dig. 48 00:02:27,270 --> 00:02:30,060 Sæt dine ben til B-2. 49 00:02:30,060 --> 00:02:34,004 Her er message-- 12, 11, 2-- 50 00:02:34,004 --> 00:02:36,503 Ralphie Parker (indtaling): Jeg er i mit første hemmeligt møde. 51 00:02:36,503 --> 00:02:40,041 RADIO SPEAKER: --25, 14, 11, 18, 16-- 52 00:02:40,041 --> 00:02:42,790 Ralphie Parker (indtaling): Åh, Pierre var i stor stemme i aften. 53 00:02:42,790 --> 00:02:46,110 Jeg kunne fortælle, at aftenens budskab var virkelig vigtigt. 54 00:02:46,110 --> 00:02:47,930 >> RADIO SPEAKER: --3 25. 55 00:02:47,930 --> 00:02:49,940 Det er en besked fra Annie selv. 56 00:02:49,940 --> 00:02:52,182 Husk, at ikke fortælle nogen. 57 00:02:52,182 --> 00:02:55,077 >> [Pustende] 58 00:02:55,077 --> 00:02:57,285 Ralphie Parker (indtaling): Halvfems sekunder senere, er jeg 59 00:02:57,285 --> 00:03:00,090 i det eneste rum i hus, hvor en dreng på ni 60 00:03:00,090 --> 00:03:04,380 kunne sidde i fred og afkode. 61 00:03:04,380 --> 00:03:04,990 Ah. 62 00:03:04,990 --> 00:03:05,680 "B" 63 00:03:05,680 --> 00:03:06,524 >> [Griner] 64 00:03:06,524 --> 00:03:08,684 >> Ralphie Parker (indtaling): Jeg gik til den næste. 65 00:03:08,684 --> 00:03:09,610 "E" 66 00:03:09,610 --> 00:03:11,641 Det første ord er "være". 67 00:03:11,641 --> 00:03:12,140 Ja! 68 00:03:12,140 --> 00:03:14,293 Det kom nemmere nu. 69 00:03:14,293 --> 00:03:15,259 "U." 70 00:03:15,259 --> 00:03:16,225 >> [Griner] 71 00:03:16,225 --> 00:03:18,157 >> RANDY PARKER: Øv, kom nu, Ralphie. 72 00:03:18,157 --> 00:03:19,606 Jeg må gå! 73 00:03:19,606 --> 00:03:21,538 >> Ralphie Parker: Jeg kommer lige ned, Ma. 74 00:03:21,538 --> 00:03:22,504 Gee Whiz. 75 00:03:22,504 --> 00:03:25,402 76 00:03:25,402 --> 00:03:31,220 "T." "O." "Vær sikker til. "" Vær sikker på at "hvad? 77 00:03:31,220 --> 00:03:33,981 Hvad var Little Orphan Annie prøver at sige? "Vær sikker på at" hvad? 78 00:03:33,981 --> 00:03:35,522 MOR: Ralphie, Randy har fået til at gå. 79 00:03:35,522 --> 00:03:36,735 Vil du venligst komme ud? 80 00:03:36,735 --> 00:03:38,190 >> Ralphie Parker: Okay, mor! 81 00:03:38,190 --> 00:03:39,787 Jeg kommer lige ud! 82 00:03:39,787 --> 00:03:41,995 Ralphie Parker (indtaling): Jeg var ved at blive tættere på nu. 83 00:03:41,995 --> 00:03:43,370 Spændingen var forfærdeligt. 84 00:03:43,370 --> 00:03:44,794 Hvad var det? 85 00:03:44,794 --> 00:03:47,656 Den skæbne af planeten kan hænge i balance. 86 00:03:47,656 --> 00:03:50,518 >> MOR: Ralphie, Randys kom til at gå! 87 00:03:50,518 --> 00:03:53,635 >> Ralphie Parker: Jeg kommer lige ud, for skriger højt! 88 00:03:53,635 --> 00:03:55,343 Ralphie PARKER (Fortælle): Almost there! 89 00:03:55,343 --> 00:03:56,520 Mine fingre fløj! 90 00:03:56,520 --> 00:03:58,500 Mit sind var en stål fælde. 91 00:03:58,500 --> 00:03:59,850 Hver pore vibrerede. 92 00:03:59,850 --> 00:04:01,806 Det var næsten klar! 93 00:04:01,806 --> 00:04:02,773 Ja! 94 00:04:02,773 --> 00:04:03,273 Ja! 95 00:04:03,273 --> 00:04:03,773 Ja! 96 00:04:03,773 --> 00:04:04,740 Ja! 97 00:04:04,740 --> 00:04:10,250 >> Ralphie Parker: "Vær sikker at drikke din Ovaltine. " 98 00:04:10,250 --> 00:04:10,750 Ovaltine? 99 00:04:10,750 --> 00:04:14,864 100 00:04:14,864 --> 00:04:17,539 En mærkværdige kommerciel? 101 00:04:17,539 --> 00:04:19,439 >> [Musik spiller] 102 00:04:19,439 --> 00:04:21,724 >> Ralphie Parker: Søn af en tæve. 103 00:04:21,724 --> 00:04:23,460 >> [LAUGHING] 104 00:04:23,460 --> 00:04:27,070 >> David J. MALAN: Så da er et indblik i, hvad kryptografi 105 00:04:27,070 --> 00:04:29,880 kan være for denne-- en drikke fra gårsdagens. 106 00:04:29,880 --> 00:04:30,900 Så en hurtig meddelelse. 107 00:04:30,900 --> 00:04:33,410 Hvis du er fri dette Fredag ​​kl 13:15 og ville 108 00:04:33,410 --> 00:04:36,610 gerne slutte sig til os CS50 frokost, hoved til denne webadresse her. 109 00:04:36,610 --> 00:04:38,080 Komme først, først tjene som sædvanlig. 110 00:04:38,080 --> 00:04:41,840 Men over tid, vil vi sørge for, at de fleste nogen, der gerne vil deltage 111 00:04:41,840 --> 00:04:43,640 kan planlægge-wise. 112 00:04:43,640 --> 00:04:45,170 >> Så strenge. 113 00:04:45,170 --> 00:04:47,940 Vi har Zamyla-- hvem du nu har mødt mest sandsynligt 114 00:04:47,940 --> 00:04:50,750 i Problem Set 1-- hvis navn er stavet således. 115 00:04:50,750 --> 00:04:53,570 Og formoder du har skrevet sit navn ind i et edb-program, der er 116 00:04:53,570 --> 00:04:55,710 bruge noget lignende getString. 117 00:04:55,710 --> 00:04:57,890 For at hente disse tastetryk, hvordan 118 00:04:57,890 --> 00:05:01,620 vi går om repræsenterer en streng, et ord, et stykke, 119 00:05:01,620 --> 00:05:03,960 eller flere bogstaver som disse her? 120 00:05:03,960 --> 00:05:06,790 >> Vi talte sidste gang om heltal og problemer 121 00:05:06,790 --> 00:05:09,960 der opstår med heltalsoverløb og kommeværdier 122 00:05:09,960 --> 00:05:12,190 og problemer, opstå inden præcision. 123 00:05:12,190 --> 00:05:16,080 Med strygere, vi i det mindste har en smule mere fleksibilitet 124 00:05:16,080 --> 00:05:17,970 fordi strings-- bare i den virkelige verden- 125 00:05:17,970 --> 00:05:19,790 kan være en temmelig vilkårlig længde. 126 00:05:19,790 --> 00:05:21,055 Temmelig kort, temmelig længe. 127 00:05:21,055 --> 00:05:23,680 Men selv da, vil vi finde, at computere kan undertiden 128 00:05:23,680 --> 00:05:27,200 løbe tør for hukommelse og ikke engang gemme en stor nok streng. 129 00:05:27,200 --> 00:05:30,840 >> Men for nu, lad os begynde at visualisere en streng som noget i disse kasser 130 00:05:30,840 --> 00:05:31,340 her. 131 00:05:31,340 --> 00:05:36,410 Så seks sådanne kasser, som hver repræsenterer et tegn eller "char". 132 00:05:36,410 --> 00:05:40,646 Så huske på, at "char" - c-h-a-r-- er en af ​​de indbyggede datatyper i C. 133 00:05:40,646 --> 00:05:43,520 Og hvad er rart er, at du kan bruge den slags som en byggesten, 134 00:05:43,520 --> 00:05:47,880 en brik, hvis du vil, for at danne en større type data, vi vil fortsætte 135 00:05:47,880 --> 00:05:49,410 at kalde en "streng". 136 00:05:49,410 --> 00:05:53,650 >> Nu, hvad er nyttigt om at tænke om ting som strenge i denne måde? 137 00:05:53,650 --> 00:05:57,720 Tja, det viser sig, at vi kan faktisk udnytte denne struktur 138 00:05:57,720 --> 00:06:01,420 til rent faktisk at få adgang til enkelte tegn i en temmelig ligetil måde. 139 00:06:01,420 --> 00:06:04,099 Jeg har tænkt mig at gå videre og skabe en fil kaldet "stringzero.c" 140 00:06:04,099 --> 00:06:05,765 men du kan kalde det hvad du vil. 141 00:06:05,765 --> 00:06:08,500 Og på kursets hjemmeside er allerede dette eksempel i forvejen, 142 00:06:08,500 --> 00:06:10,430 så du behøver ikke at skriv alting ud. 143 00:06:10,430 --> 00:06:13,820 >> Og jeg har tænkt mig at gå videre og først gøre int main tomrum. 144 00:06:13,820 --> 00:06:15,980 Og inden for et par dage, vi vil begynde at drille hinanden 145 00:06:15,980 --> 00:06:19,070 hvad tomrum er her, hvorfor det er int ud for vigtigste, og så videre. 146 00:06:19,070 --> 00:06:21,180 Men for nu, lad os fortsætte at kopiere indsætte det. 147 00:06:21,180 --> 00:06:23,455 >> Jeg har tænkt mig at erklære en streng kaldet sek. 148 00:06:23,455 --> 00:06:26,920 Og jeg har tænkt mig at vende tilbage fra GetString hvad brugeren typer i. 149 00:06:26,920 --> 00:06:29,170 Dette vil være en simpel programmet ingen instruktioner, 150 00:06:29,170 --> 00:06:31,336 Jeg skal bare blindt forventer, at brugeren ved 151 00:06:31,336 --> 00:06:32,600 hvad man skal gøre for at holde det simpelt. 152 00:06:32,600 --> 00:06:34,220 >> Og nu jeg har tænkt mig at have en for-løkke. 153 00:06:34,220 --> 00:06:37,450 Og inde i mit for-løkke er jeg nødt til int i får nul. 154 00:06:37,450 --> 00:06:40,660 Og jeg er, igen, bare en konvention, et indeks variabel til optælling, 155 00:06:40,660 --> 00:06:42,350 men jeg kunne kalde dette hvad jeg vil. 156 00:06:42,350 --> 00:06:46,275 Jeg har tænkt mig at gøre, jeg er mindre than-- godt Zamyla navn er seks bogstaver. 157 00:06:46,275 --> 00:06:48,150 Så jeg har tænkt mig at hårdt kode, der nu. 158 00:06:48,150 --> 00:06:49,730 >> Og derefter jeg ++. 159 00:06:49,730 --> 00:06:53,190 Og nu inde i disse krøllede seler jeg tænkt mig at gøre printf, 160 00:06:53,190 --> 00:06:55,460 og jeg ønsker at udskrive et tegn ad gangen. 161 00:06:55,460 --> 00:06:58,227 Så jeg har tænkt mig at bruge% c til måske for første gang. 162 00:06:58,227 --> 00:07:00,560 Og så jeg ønsker at udskrive hver tegn på sin egen linje. 163 00:07:00,560 --> 00:07:02,550 Så jeg har tænkt mig at sætte en lille backslash n der. 164 00:07:02,550 --> 00:07:03,640 Luk citat. 165 00:07:03,640 --> 00:07:06,250 >> Og nu jeg ønsker at gøre noget her. 166 00:07:06,250 --> 00:07:10,610 Jeg ønsker at udskrive bestemt bogstav i strengen, 167 00:07:10,610 --> 00:07:13,670 s, da jeg iteration fra nul på op til seks. 168 00:07:13,670 --> 00:07:17,150 Med andre ord, jeg ønsker at udskrive i'te karakter filtre. 169 00:07:17,150 --> 00:07:18,420 Nu hvordan kan jeg gøre dette? 170 00:07:18,420 --> 00:07:21,550 >> Nå ligesom kasserne i denne repræsentation her, 171 00:07:21,550 --> 00:07:25,560 slags, fremmane begrebet boksning bogstaver i, kan du ligeledes gøre det 172 00:07:25,560 --> 00:07:32,630 syntaktisk i C ved blot at angive, Jeg vil udskrive s'er i'te karakter. 173 00:07:32,630 --> 00:07:35,640 Brug de firkantede parenteser på computerens tastatur 174 00:07:35,640 --> 00:07:38,910 at der på et amerikansk tastatur er generelt over dit afkast nøgle. 175 00:07:38,910 --> 00:07:42,630 >> Så det er ikke helt rigtigt endnu, som du måske har bemærket. 176 00:07:42,630 --> 00:07:44,780 Men jeg har tænkt mig at slags blindt mase her. 177 00:07:44,780 --> 00:07:47,020 Og jeg har tænkt mig at gøre gøre streng 0. 178 00:07:47,020 --> 00:07:50,860 Men før jeg gør det, lad os se om vi kan ikke forudse nogle almindelige fejl. 179 00:07:50,860 --> 00:07:52,844 Er det kommer til at kompilere? 180 00:07:52,844 --> 00:07:54,510 Nej, jeg mangler en hel masse ting. 181 00:07:54,510 --> 00:07:55,280 Biblioteker jeg hørt. 182 00:07:55,280 --> 00:07:58,480 >> Så som header-filer jeg måske ønsker at tilføje her? 183 00:07:58,480 --> 00:07:59,205 Ja. 184 00:07:59,205 --> 00:08:01,580 >> PUBLIKUM: Du skal standard I / O [uhørligt] 185 00:08:01,580 --> 00:08:02,663 >> David J. MALAN: Excellent. 186 00:08:02,663 --> 00:08:06,060 Så jeg har brug for standard I / O. For hvad formål ønsker jeg standard I / O? 187 00:08:06,060 --> 00:08:06,670 For printf. 188 00:08:06,670 --> 00:08:09,220 Så omfatte stdio.h. 189 00:08:09,220 --> 00:08:13,490 Og du også foreslå, at jeg inkluderer Den CS50 biblioteket hvorfor? 190 00:08:13,490 --> 00:08:14,650 At have strenge. 191 00:08:14,650 --> 00:08:17,780 Så vi vil se, hvad CS50 bibliotek gør 192 00:08:17,780 --> 00:08:19,260 at skabe denne forestilling om en streng. 193 00:08:19,260 --> 00:08:21,930 Men for nu, kan du bare tænke på det som en egentlige datatype. 194 00:08:21,930 --> 00:08:23,596 >> Så der synes at være en smule renset. 195 00:08:23,596 --> 00:08:27,060 Og nu jeg har tænkt mig at gå videre og faktisk gør streng 0. 196 00:08:27,060 --> 00:08:27,700 Opgjort. 197 00:08:27,700 --> 00:08:28,370 Så det er godt. 198 00:08:28,370 --> 00:08:32,799 Så ./string0 lad mig zoome ind, så vi kan se nærmere hvad der sker. 199 00:08:32,799 --> 00:08:33,850 Enter. 200 00:08:33,850 --> 00:08:37,789 Z-A-M-Y-L-A ind. 201 00:08:37,789 --> 00:08:39,440 Og vi har printet ud til Zamyla navn. 202 00:08:39,440 --> 00:08:40,409 >> Så det er temmelig godt. 203 00:08:40,409 --> 00:08:43,220 Så lad os nu gå videre og køre dette program igen 204 00:08:43,220 --> 00:08:45,659 og skriv ud Daven fulde navn. 205 00:08:45,659 --> 00:08:46,450 Surprise, surprise. 206 00:08:46,450 --> 00:08:48,021 Enter. 207 00:08:48,021 --> 00:08:48,520 Hmm. 208 00:08:48,520 --> 00:08:51,750 Vi har ikke udskrevet Daven s fulde fornavn korrekt. 209 00:08:51,750 --> 00:08:54,250 Nu er dette burde være indlysende i tilbageblik på grund af hvad, 210 00:08:54,250 --> 00:08:57,010 slags, dumme design beslutning? 211 00:08:57,010 --> 00:08:59,590 >> Ja, jeg hårdt kodet seks inde i min til løkke. 212 00:08:59,590 --> 00:09:01,610 Nu har jeg, at kun fordi Jeg vidste Zamyla navn 213 00:09:01,610 --> 00:09:02,776 skulle være seks bogstaver. 214 00:09:02,776 --> 00:09:04,720 Men sikkert er det ikke en generel løsning. 215 00:09:04,720 --> 00:09:07,720 Så det viser sig, vi kan dynamisk finde ud af længden af ​​en streng 216 00:09:07,720 --> 00:09:10,440 ved at kalde en funktion kaldet strlen. 217 00:09:10,440 --> 00:09:12,840 >> Igen, bevidst kortfattet navngivet bare 218 00:09:12,840 --> 00:09:14,450 at gøre det mere bekvemt at skrive. 219 00:09:14,450 --> 00:09:17,170 Men det er synonymt med at få længden af ​​en streng. 220 00:09:17,170 --> 00:09:23,190 Jeg har tænkt mig at gå tilbage til min terminal vindue og re-run compileren. 221 00:09:23,190 --> 00:09:24,170 Men det er råben på mig. 222 00:09:24,170 --> 00:09:29,130 Implicit erklære biblioteksfunktionen strlen med type unsigned int const-- 223 00:09:29,130 --> 00:09:29,780 Jeg er faret vild. 224 00:09:29,780 --> 00:09:30,590 Helt. 225 00:09:30,590 --> 00:09:32,940 >> Så, især da din øjne begynder at glasur over 226 00:09:32,940 --> 00:09:36,000 med fejlmeddelelser som denne, fokus ærligt på de første par ord. 227 00:09:36,000 --> 00:09:38,590 Vi ved, at problemet er i linje 8, som anført her. 228 00:09:38,590 --> 00:09:40,500 Og det er i streng-0.c. 229 00:09:40,500 --> 00:09:43,580 Implicit erklære biblioteksfunktionen strlen. 230 00:09:43,580 --> 00:09:47,000 Så der generelt vil være et mønster af fejlmeddelelser. 231 00:09:47,000 --> 00:09:49,190 Implicit erklære noget. 232 00:09:49,190 --> 00:09:53,250 >> Så kort sagt, hvad har jeg syntes at har gjort med hensyn til linje 8, her. 233 00:09:53,250 --> 00:09:56,880 Hvad kunne være løsningen være endnu hvis du aldrig har brugt strlen dig selv? 234 00:09:56,880 --> 00:09:58,907 >> PUBLIKUM: En del af et andet bibliotek? 235 00:09:58,907 --> 00:10:00,740 David J. MALAN: Part af et andet bibliotek. 236 00:10:00,740 --> 00:10:02,400 Så det er erklæret, så at sige. 237 00:10:02,400 --> 00:10:07,510 Det er nævnt i nogle fil bortset stdio.h og CS50.h. 238 00:10:07,510 --> 00:10:09,179 Nu hvor det defineres? 239 00:10:09,179 --> 00:10:12,220 For at være ærlig, du enten nødt til bare vide dette fra toppen af ​​dit hoved, 240 00:10:12,220 --> 00:10:13,640 eller du Google det og finde ud af. 241 00:10:13,640 --> 00:10:18,150 Eller vide dette, har jeg åbnet i CS50 Appliance terminal-programmet, som 242 00:10:18,150 --> 00:10:22,200 er kun de store, fuld skærm version af hvad der er i bunden af ​​gedit vindue. 243 00:10:22,200 --> 00:10:24,970 >> Og det viser sig, at der er en ligeledes kortfattet kommando, kaldet 244 00:10:24,970 --> 00:10:29,280 mand til manuel, hvor, hvis du skriver i navnet på en funktion og tryk Enter, 245 00:10:29,280 --> 00:10:32,240 du får tilbage forholdsvis mystiske dokumentation. 246 00:10:32,240 --> 00:10:35,299 Det er bare tekst, som generelt ser lidt noget som dette. 247 00:10:35,299 --> 00:10:37,090 Det er lidt overvældende ved første øjekast. 248 00:10:37,090 --> 00:10:39,048 Men helt ærligt jeg har tænkt mig at lad mine øjne glasur over 249 00:10:39,048 --> 00:10:41,930 og kun fokusere på den del Jeg bryder mig om for øjeblikket. 250 00:10:41,930 --> 00:10:42,780 >> Hvilket er dette. 251 00:10:42,780 --> 00:10:45,470 Som ser strukturelt lignende noget, jeg er bekendt med. 252 00:10:45,470 --> 00:10:48,080 Faktisk man-siden, så til at tale, vil fortælle dig 253 00:10:48,080 --> 00:10:51,590 i hvilken header indgive en funktion ligesom strlen er defineret. 254 00:10:51,590 --> 00:10:54,170 Så jeg har tænkt mig at gå tilbage nu til gedit. 255 00:10:54,170 --> 00:10:59,070 Og jeg har tænkt mig at gå videre og tilføje her include 256 00:10:59,070 --> 00:11:00,480 og gem filen. 257 00:11:00,480 --> 00:11:04,300 >> Jeg har tænkt mig at rydde skærmen med Kontrol L Hvis du har undret. 258 00:11:04,300 --> 00:11:08,210 Og jeg har tænkt mig at re-run make string.0, kompilerer denne gang. 259 00:11:08,210 --> 00:11:11,790 ./string.0 Zamyla. 260 00:11:11,790 --> 00:11:15,020 Det syntes at arbejde Lad mig gå fremad, og gentag det med Davenport. 261 00:11:15,020 --> 00:11:15,860 Enter. 262 00:11:15,860 --> 00:11:17,730 Og det, syntes også, at arbejde. 263 00:11:17,730 --> 00:11:21,220 >> Så vi kan gøre det lidt bedre end dette, selv, kan vi begynde at rydde ting 264 00:11:21,220 --> 00:11:23,257 op bare en lille smule. 265 00:11:23,257 --> 00:11:25,590 Og jeg har tænkt mig at der faktisk introducere en anden ting nu. 266 00:11:25,590 --> 00:11:28,930 Jeg har tænkt mig at gå videre og gemme denne i en anden fil. 267 00:11:28,930 --> 00:11:31,770 Og jeg har tænkt mig at ringe til denne fil string1.c bare 268 00:11:31,770 --> 00:11:34,620 at være i overensstemmelse med koden vil du være i stand til at finde online. 269 00:11:34,620 --> 00:11:37,050 >> Og lad os fokusere på nøjagtig den samme kode. 270 00:11:37,050 --> 00:11:39,000 Det viser sig, at jeg har været slags tage 271 00:11:39,000 --> 00:11:42,600 for givet, at min bærbare computer, og til gengæld, det CS50 apparatet 272 00:11:42,600 --> 00:11:47,450 har en masse hukommelse, en masse RAM, en masse af bytes af rummet 273 00:11:47,450 --> 00:11:48,920 hvor jeg kan gemme strenge. 274 00:11:48,920 --> 00:11:53,560 >> Men virkeligheden, hvis jeg har skrevet lange nok, og nok tastetryk, 275 00:11:53,560 --> 00:11:56,170 Jeg kunne i teorien typen i flere tegn 276 00:11:56,170 --> 00:11:58,830 end min computer har fysisk hukommelse. 277 00:11:58,830 --> 00:11:59,830 Og det er problematisk. 278 00:11:59,830 --> 00:12:03,050 Meget gerne en int kan kun tælle så højt, i teorien, 279 00:12:03,050 --> 00:12:06,600 du kan kun proppe så mange tegn i computerens RAM eller Random 280 00:12:06,600 --> 00:12:07,920 Access Memory. 281 00:12:07,920 --> 00:12:11,140 >> Så jeg havde bedre til at foregribe dette problem, selv 282 00:12:11,140 --> 00:12:13,660 selvom det kan være en sjælden hjørne tilfælde, så at sige. 283 00:12:13,660 --> 00:12:15,670 Sker ikke så tit, kunne ske. 284 00:12:15,670 --> 00:12:18,815 Og hvis det sker, og det gør jeg ikke foregribe og program for det, 285 00:12:18,815 --> 00:12:20,300 mit program kunne gøre hvem ved hvad. 286 00:12:20,300 --> 00:12:22,220 Frys, hænge, ​​genstarte, uanset hvad. 287 00:12:22,220 --> 00:12:24,490 Noget forventet kunne ske. 288 00:12:24,490 --> 00:12:27,120 >> Så hvad jeg har tænkt mig at gøre nu, fremover virkelig, 289 00:12:27,120 --> 00:12:31,630 er før jeg nogensinde blindt bruge som en variabel s, der 290 00:12:31,630 --> 00:12:36,790 er blevet tildelt returværdien af en anden funktion som getString, 291 00:12:36,790 --> 00:12:40,200 Jeg har tænkt mig at sørge at dens værdi er gyldig. 292 00:12:40,200 --> 00:12:44,280 Så jeg ved kun fra at have læst CS50 dokumentation for getString, 293 00:12:44,280 --> 00:12:49,020 hvilket i sidste ende vil vi pege dig på, at getString returnerer et særligt symbol 294 00:12:49,020 --> 00:12:53,610 kaldet NULL, N-U-L-L i alt kasketter, hvis noget går galt. 295 00:12:53,610 --> 00:12:55,650 >> Så normalt, det returnerer en streng. 296 00:12:55,650 --> 00:12:59,700 Men ellers hvis det vender tilbage N-U-L-jeg-- vi vil til sidst se, hvad der virkelig 297 00:12:59,700 --> 00:13:01,790 means-- det betyder bare noget slemt er sket. 298 00:13:01,790 --> 00:13:05,560 Nu betyder det, meget gerne i Scratch, Jeg kan kontrollere en tilstand her i C, 299 00:13:05,560 --> 00:13:08,830 hvis S ikke lige NUL. 300 00:13:08,830 --> 00:13:11,930 Så hvis du ikke har set det før, dette betyder bare ikke gør lige. 301 00:13:11,930 --> 00:13:15,290 >> Så det er det modsatte af lige ligemænd, som husker, 302 00:13:15,290 --> 00:13:18,940 er forskellig fra en enkelt lig, der er opgaven. 303 00:13:18,940 --> 00:13:23,030 Så hvis r ikke er lig NULL, først da gøre 304 00:13:23,030 --> 00:13:25,980 Jeg vil udføre disse linjer kode. 305 00:13:25,980 --> 00:13:28,080 Så med andre ord, før jeg dykke i blindt 306 00:13:28,080 --> 00:13:30,919 og start iteration i løbet af s, og behandle det 307 00:13:30,919 --> 00:13:33,710 som om det er en sekvens af tegn, vil jeg først kontrollere, 308 00:13:33,710 --> 00:13:37,900 vent et øjeblik, er S bestemt ikke svarende til denne særlige værdi, NULL? 309 00:13:37,900 --> 00:13:40,030 >> Fordi hvis det er, kan dårlige ting ske. 310 00:13:40,030 --> 00:13:43,080 Og for nu antage, at dårlige ting sker betyder, at dine program går ned, 311 00:13:43,080 --> 00:13:45,070 og du kan ikke nødvendigvis komme sig. 312 00:13:45,070 --> 00:13:46,800 Så ærligt, det ser grimmere. 313 00:13:46,800 --> 00:13:48,660 Det er lidt forvirrende nu at kigge på. 314 00:13:48,660 --> 00:13:50,780 Men det vil blive mere velkendt inden længe. 315 00:13:50,780 --> 00:13:52,920 >> Men jeg har tænkt mig at foreslå nu en anden forbedring. 316 00:13:52,920 --> 00:13:54,660 Det er en forbedring korrekthed. 317 00:13:54,660 --> 00:13:58,800 Mit program er nu mere korrekt, fordi i de sjældne tilfælde, at ikke nok hukommelse 318 00:13:58,800 --> 00:14:01,180 eksisterer, vil jeg håndtere det, og jeg vil bare ikke gøre noget. 319 00:14:01,180 --> 00:14:02,680 Jeg i det mindste ikke vil gå ned. 320 00:14:02,680 --> 00:14:05,000 >> Men lad os gøre en endelig version her. 321 00:14:05,000 --> 00:14:07,690 Og en fil kaldet string2.c. 322 00:14:07,690 --> 00:14:10,190 Jeg har tænkt mig at indsætte det samme kode for bare et øjeblik, 323 00:14:10,190 --> 00:14:14,210 og jeg har tænkt mig at fremhæve dette linje, 11, her, for bare et øjeblik. 324 00:14:14,210 --> 00:14:18,179 Nu er virkeligheden, at intelligente compilere ligesom Dunk kunne løse dette for os 325 00:14:18,179 --> 00:14:19,970 bag kulisserne uden vores nogensinde at vide. 326 00:14:19,970 --> 00:14:24,670 Men lad os tænke over det fundamentalt en problematisk design. 327 00:14:24,670 --> 00:14:29,010 >> Denne linje kode er naturligvis, sagde initialisere nogle variablen i til 0. 328 00:14:29,010 --> 00:14:30,260 Det er temmelig ligetil. 329 00:14:30,260 --> 00:14:34,691 Og hvad er igen dette erklæring, her, jeg ++, laver? 330 00:14:34,691 --> 00:14:37,066 Vi har set det før, men vi ikke rigtig tale om det. 331 00:14:37,066 --> 00:14:37,900 >> Publikum: Forøgelsen i. 332 00:14:37,900 --> 00:14:39,191 >> David J. MALAN: Forøgelsen i. 333 00:14:39,191 --> 00:14:41,890 Så på hver iteration gennem denne løkke i hver cyklus, 334 00:14:41,890 --> 00:14:43,570 du forøgelse i efter én. 335 00:14:43,570 --> 00:14:45,740 Så det bliver større, og større, og større indtil løkken afsluttes. 336 00:14:45,740 --> 00:14:46,810 Hvordan det ophører? 337 00:14:46,810 --> 00:14:49,430 Nå der er denne midten tilstand, som vi har brugt før. 338 00:14:49,430 --> 00:14:52,500 Du har set og i walkthroughs i P sæt. 339 00:14:52,500 --> 00:14:53,880 >> Men hvad er dette Ord? 340 00:14:53,880 --> 00:14:58,352 Gør følgende loop så længe jeg er mindre end hvad? 341 00:14:58,352 --> 00:14:59,810 AUDIENCE: Længden af ​​strengen. 342 00:14:59,810 --> 00:15:01,518 David J. MALAN: Den længden af ​​strengen. 343 00:15:01,518 --> 00:15:04,300 Så det oversætter temmelig rent til engelsk i den forstand. 344 00:15:04,300 --> 00:15:08,810 Nu er problemet, at hver gang jeg gentage gennem denne løkke i teorien, 345 00:15:08,810 --> 00:15:10,000 Jeg stiller dette spørgsmål. 346 00:15:10,000 --> 00:15:12,250 Er I mindre end strengen længden af ​​s? 347 00:15:12,250 --> 00:15:14,500 Er I mindre end strengen længden af ​​s? 348 00:15:14,500 --> 00:15:18,380 >> Nu er jeg ændrer på hver iteration? 349 00:15:18,380 --> 00:15:18,880 Det er. 350 00:15:18,880 --> 00:15:19,629 På grund af den ++. 351 00:15:19,629 --> 00:15:21,700 Så hver iteration jeg bliver større. 352 00:15:21,700 --> 00:15:25,411 Men er s bliver større, eller mindre, eller slet forandring? 353 00:15:25,411 --> 00:15:25,910 Nej 354 00:15:25,910 --> 00:15:30,240 Så med hensyn til design, en af ​​akserne langs hvilken vi forsøger at vurdere kode 355 00:15:30,240 --> 00:15:32,610 i klassen, dette føles lidt dumt. 356 00:15:32,610 --> 00:15:34,690 >> Ligesom du er bogstaveligt talt, på hver iteration 357 00:15:34,690 --> 00:15:37,110 af denne løkke beder samme pokkers spørgsmål igen, 358 00:15:37,110 --> 00:15:40,770 og igen, og igen, og bogstaveligt talt det kommer aldrig til at ændre sig. 359 00:15:40,770 --> 00:15:44,220 I hvert fald hvis jeg ikke rører s og forsøger at ændre indholdet af filtre. 360 00:15:44,220 --> 00:15:46,610 Så jeg kan gøre det lidt bedre end dette. 361 00:15:46,610 --> 00:15:49,530 >> Og hvad jeg har tænkt mig at gøre, er ikke erklærer kun én variabel i, 362 00:15:49,530 --> 00:15:53,330 men en anden variabel jeg vil vilkårligt, men konventionelt, kalder det n. 363 00:15:53,330 --> 00:15:55,940 Tildel n er lig med den streng længde filtre. 364 00:15:55,940 --> 00:15:59,090 Og så herovre, vil jeg gøre en smart lille optimering, så 365 00:15:59,090 --> 00:16:03,460 at sige, at der ved udgangen af ​​dagen er ikke mere rigtig eller ikke mindre korrekt 366 00:16:03,460 --> 00:16:04,260 end før. 367 00:16:04,260 --> 00:16:05,500 Men det er et bedre design. 368 00:16:05,500 --> 00:16:09,480 I det faktum, at jeg bruger mindre tid, færre CPU-cyklusser, så 369 00:16:09,480 --> 00:16:14,040 til at tale, for at besvare det samme spørgsmål, men kun én gang. 370 00:16:14,040 --> 00:16:17,870 >> Eventuelle spørgsmål vedrørende denne generelle princippet om at forbedre, 371 00:16:17,870 --> 00:16:21,294 siger, et programmets effektivitet? 372 00:16:21,294 --> 00:16:21,991 Ja? 373 00:16:21,991 --> 00:16:23,699 PUBLIKUM: Hvorfor skal du bruge [uhørligt]? 374 00:16:23,699 --> 00:16:25,760 375 00:16:25,760 --> 00:16:27,010 David J. MALAN: Godt spørgsmål. 376 00:16:27,010 --> 00:16:30,690 Så hvorfor skal vi sætte ++ på enden af i stedet for begyndelsen af ​​i? 377 00:16:30,690 --> 00:16:33,070 I dette tilfælde har det ingen funktionel effekt. 378 00:16:33,070 --> 00:16:36,670 Og generelt, jeg har tendens til at bruge postfiksoperatoren 379 00:16:36,670 --> 00:16:41,750 så det er lidt mere klar som til, når operationen sker. 380 00:16:41,750 --> 00:16:46,670 >> For dem bekendt, er der en anden udsagn, hvor du kan gøre ++ jeg. 381 00:16:46,670 --> 00:16:48,747 Disse er funktionelt tilsvarende i dette tilfælde 382 00:16:48,747 --> 00:16:51,080 fordi der er intet andet omkring denne optælling. 383 00:16:51,080 --> 00:16:54,435 Men du kan komme op med sager og linjer kode 384 00:16:54,435 --> 00:16:55,810 hvori det gør en forskel. 385 00:16:55,810 --> 00:16:57,810 Så generelt, gør vi ikke endda tale om denne ene. 386 00:16:57,810 --> 00:17:00,690 Fordi ærligt, det gør din kode mere sexet, og sortering af glattere, 387 00:17:00,690 --> 00:17:01,776 og færre tegn. 388 00:17:01,776 --> 00:17:04,859 Men virkeligheden er, det er en meget sværere, Jeg tror, ​​selv for mig at ombryde mit sind 389 00:17:04,859 --> 00:17:07,319 omkring det undertiden, rækkefølgen af ​​operationer. 390 00:17:07,319 --> 00:17:09,750 Så som en sidebemærkning, hvis du virkelig ikke kan lide dette, 391 00:17:09,750 --> 00:17:14,650 selv om det er lidt sexet søger, kan du også gøre i + = 1, 392 00:17:14,650 --> 00:17:18,880 som er grimmere version af samme idé for postfix optælling. 393 00:17:18,880 --> 00:17:22,250 >> Jeg siger dette, og du bør gøre grin med det, 394 00:17:22,250 --> 00:17:25,140 men du vil komme til at se koden som noget smukt inden længe. 395 00:17:25,140 --> 00:17:27,160 >> [Latter] 396 00:17:27,160 --> 00:17:28,410 >> David J. MALAN: Right? 397 00:17:28,410 --> 00:17:29,360 Ja. 398 00:17:29,360 --> 00:17:30,480 Spørgsmål i midten. 399 00:17:30,480 --> 00:17:32,146 >> PUBLIKUM: Har du brug for at sige int n? 400 00:17:32,146 --> 00:17:34,020 David J. MALAN: Du gør ikke behøver at sige int n. 401 00:17:34,020 --> 00:17:37,670 Så fordi vi allerede har sagt int, du behøver ikke at sige det igen. 402 00:17:37,670 --> 00:17:41,820 Fangsten er, at n har til være den samme datatype som jeg. 403 00:17:41,820 --> 00:17:43,310 Så det er bare en bekvemmelighed her. 404 00:17:43,310 --> 00:17:44,058 Ja. 405 00:17:44,058 --> 00:17:47,806 >> PUBLIKUM: Kan du gå over udskriv karakter s beslag jeg igen? 406 00:17:47,806 --> 00:17:48,930 David J. MALAN: Helt sikkert. 407 00:17:48,930 --> 00:17:52,110 Så% c, husker fra sidste tid, er blot en pladsholder. 408 00:17:52,110 --> 00:17:53,930 Det betyder sætte en char her. 409 00:17:53,930 --> 00:17:56,780 omvendt skråstreg n naturligvis blot midler sætte et linjeskift her. 410 00:17:56,780 --> 00:17:59,540 Så bare blade, nu, dette stykke nye syntaks. 411 00:17:59,540 --> 00:18:03,730 Og det er bogstaveligt talt sige, grab strengen kaldes s og gå få sin 412 00:18:03,730 --> 00:18:06,050 i'te karakter, så at sige. 413 00:18:06,050 --> 00:18:10,590 >> Og jeg ved med at sige i'te karakter fordi på hver gentagelse af denne løkke 414 00:18:10,590 --> 00:18:14,540 det er som om vi udskriver ud, første s konsol 0, 415 00:18:14,540 --> 00:18:15,780 som programmør måske sige. 416 00:18:15,780 --> 00:18:18,680 Så s beslag 1, så r beslag 2, så 3 og derefter 4. 417 00:18:18,680 --> 00:18:21,610 Men det er jo en variabel, så jeg bare udtrykke det med jeg. 418 00:18:21,610 --> 00:18:23,900 >> Key, er imidlertid at indse, især hvis du ikke har 419 00:18:23,900 --> 00:18:26,358 været acclimating til denne verden af programmering, hvor vi alle 420 00:18:26,358 --> 00:18:28,950 synes at tælle fra nul, gotta begynde at tælle fra nul nu. 421 00:18:28,950 --> 00:18:35,130 Fordi strygere, første karakter, zi Zamyla er for bedre eller værre 422 00:18:35,130 --> 00:18:40,490 kommer til at leve på placering nummer nul. 423 00:18:40,490 --> 00:18:48,210 >> Okay, så lad mig bringe os tilbage her til Zamyla 424 00:18:48,210 --> 00:18:50,746 og se, hvad der virkelig foregår på under hætten. 425 00:18:50,746 --> 00:18:52,370 Så der er denne forestilling af typen støbning. 426 00:18:52,370 --> 00:18:53,800 Du har måske faktisk afspilles med dette allerede, 427 00:18:53,800 --> 00:18:55,970 måske for hackeren udgave af P angive én. 428 00:18:55,970 --> 00:19:00,320 Men typen støbning blot refererer til den evne i C og nogle andre sprog 429 00:19:00,320 --> 00:19:03,170 at konvertere en datatype til en anden. 430 00:19:03,170 --> 00:19:05,450 >> Nu hvordan kan vi se denne temmelig ligefrem? 431 00:19:05,450 --> 00:19:08,530 Så dette, husker, er begyndelsen af det engelske alfabet. 432 00:19:08,530 --> 00:19:11,265 Og den sammenhæng, husker, fra som en uge siden, er ASCII. 433 00:19:11,265 --> 00:19:13,790 American Standard Code til udveksling af oplysninger. 434 00:19:13,790 --> 00:19:17,080 Hvilket er bare en rigtig lang vej sige en kortlægning fra breve 435 00:19:17,080 --> 00:19:19,370 til tal, og fra tal til bogstaver. 436 00:19:19,370 --> 00:19:22,940 >> Så A til M her, prik prik prik, linjer op med, husker, 437 00:19:22,940 --> 00:19:25,582 decimaltallet 65 om op. 438 00:19:25,582 --> 00:19:27,290 Og vi ikke taler om dette udtrykkeligt, 439 00:19:27,290 --> 00:19:29,850 men mon der ligner numre til små bogstaver. 440 00:19:29,850 --> 00:19:30,820 Og ja, der er. 441 00:19:30,820 --> 00:19:33,730 Verdens besluttede nogle år siden, at lille en, små bogstaver a, 442 00:19:33,730 --> 00:19:35,020 kommer til at være 97. 443 00:19:35,020 --> 00:19:38,010 Og lille b går til at være 98, og så videre. 444 00:19:38,010 --> 00:19:40,200 >> Og for en anden tast på dit tastatur, er der 445 00:19:40,200 --> 00:19:42,190 vil være et lignende mønster af bits. 446 00:19:42,190 --> 00:19:44,540 Eller ækvivalent, et decimaltal. 447 00:19:44,540 --> 00:19:47,110 Så spørgsmålet ved hånden, er så, hvordan kan vi 448 00:19:47,110 --> 00:19:49,400 faktisk se dette under kølerhjelmen? 449 00:19:49,400 --> 00:19:51,539 Så jeg har tænkt mig at gå over til gedit igen. 450 00:19:51,539 --> 00:19:53,330 Og snarere end typen denne ene fra bunden, 451 00:19:53,330 --> 00:19:55,330 Jeg har tænkt mig at gå videre og bare åbne op for noget 452 00:19:55,330 --> 00:19:58,350 fra dagens kode kaldet ASCII nul. 453 00:19:58,350 --> 00:20:01,210 >> Og ASCII nul ligner dette. 454 00:20:01,210 --> 00:20:02,710 Så lad os slutte vores sind omkring dette. 455 00:20:02,710 --> 00:20:04,969 Så det første, jeg har kommenteret koden, hvilket er rart. 456 00:20:04,969 --> 00:20:07,010 Fordi det er bogstaveligt talt fortæller mig, hvad de skal forvente, 457 00:20:07,010 --> 00:20:08,950 vise en kortlægning for store bogstaver. 458 00:20:08,950 --> 00:20:13,690 Nu ved jeg ikke helt, hvad jeg mener med det, så lad os slutte. 459 00:20:13,690 --> 00:20:16,870 >> På engelsk, måske lidt techie engelsk, 460 00:20:16,870 --> 00:20:20,660 hvad betyder linie 18 vises at gøre for os? 461 00:20:20,660 --> 00:20:21,500 Bare linie 18. 462 00:20:21,500 --> 00:20:22,430 Hvad er det overtalelse? 463 00:20:22,430 --> 00:20:25,192 Hvad det kommer til at kick off her? 464 00:20:25,192 --> 00:20:26,100 >> PUBLIKUM: En løkke. 465 00:20:26,100 --> 00:20:26,630 >> David J. MALAN: En løkke. 466 00:20:26,630 --> 00:20:28,463 Og hvor mange gange er at gå for at skifte? 467 00:20:28,463 --> 00:20:31,562 468 00:20:31,562 --> 00:20:33,270 Publikum: [indskyde VOICES] seks gange. 469 00:20:33,270 --> 00:20:34,830 David J. MALAN: ikke seks gange. 470 00:20:34,830 --> 00:20:35,840 Publikum: 26 gange. 471 00:20:35,840 --> 00:20:36,560 David J. MALAN: 26 gange. 472 00:20:36,560 --> 00:20:37,060 Ja, undskyld. 473 00:20:37,060 --> 00:20:37,960 26 gange. 474 00:20:37,960 --> 00:20:38,460 Hvorfor? 475 00:20:38,460 --> 00:20:41,590 Tja, det er lidt underligt, men Jeg er begyndt at tælle fra 65. 476 00:20:41,590 --> 00:20:43,300 Hvilket er underligt, men ikke forkert. 477 00:20:43,300 --> 00:20:44,610 Det er ikke dårligt pr sige. 478 00:20:44,610 --> 00:20:46,980 Og jeg gør det kun fordi, i dette eksempel, 479 00:20:46,980 --> 00:20:50,455 Jeg slags foregribelse at kapital A var 65 år. 480 00:20:50,455 --> 00:20:53,330 Nu er det ikke den mest elegante måde at gøre dette, at slags hårdt kode 481 00:20:53,330 --> 00:20:56,130 esoteriske værdier, at ingen er stadigt forventes at huske. 482 00:20:56,130 --> 00:21:00,155 >> Men for nu, bemærke, at jeg er at gøre dette op gennem 65 plus 26. 483 00:21:00,155 --> 00:21:03,030 Fordi tilsyneladende jeg ikke selv ønsker at gøre det aritmetiske i mit hoved. 484 00:21:03,030 --> 00:21:04,440 Så jeg vil lade compileren gøre det. 485 00:21:04,440 --> 00:21:08,600 Men så på hver sløjfe, hver iteration af løkken, jeg forøgelsen i. 486 00:21:08,600 --> 00:21:10,196 >> Så nu det ser lidt kryptisk. 487 00:21:10,196 --> 00:21:13,320 Men vi bør have grundlæggende bygning blokke med til at forstå dette. 488 00:21:13,320 --> 00:21:15,510 % C er blot en pladsholder for en char. 489 00:21:15,510 --> 00:21:19,010 % I er en pladsholder for en int. 490 00:21:19,010 --> 00:21:23,310 Og det viser sig, at ved hjælp af denne ny syntaks denne parentetiske, så 491 00:21:23,310 --> 00:21:26,100 til at tale, så en datatype inde i en parentes 492 00:21:26,100 --> 00:21:32,270 Jeg kan tvinge compiler til at behandle jeg ikke er et helt tal, men som en char. 493 00:21:32,270 --> 00:21:35,520 >> Derved viser mig karakter svarende til dette nummer. 494 00:21:35,520 --> 00:21:37,986 Nu hernede, denne kode er temmelig meget identisk. 495 00:21:37,986 --> 00:21:39,860 Jeg ville bare gøre Super det udtrykkeligt fremgår, 496 00:21:39,860 --> 00:21:42,095 at jeg starter ved 97, som små bogstaver en. 497 00:21:42,095 --> 00:21:44,080 På op gennem 26 flere bogstaver. 498 00:21:44,080 --> 00:21:46,970 Og jeg doing-- igen, støbning i, så at sige. 499 00:21:46,970 --> 00:21:49,160 Eller type støbning i, så at sige. 500 00:21:49,160 --> 00:21:51,420 >> Fra en int til en char. 501 00:21:51,420 --> 00:21:55,760 Så slutresultatet vil være, helt ærligt, oplysninger, vi allerede kender. 502 00:21:55,760 --> 00:21:59,411 Jeg har tænkt mig at gøre ascii-0 dot-- ikke dot C. 503 00:21:59,411 --> 00:22:02,160 Bemærk, du sandsynligvis gjort, at fejl som jeg netop gjorde et uheld. 504 00:22:02,160 --> 00:22:03,820 Gør ascii-0. 505 00:22:03,820 --> 00:22:06,090 Nu vil jeg gøre ./ascii-0. 506 00:22:06,090 --> 00:22:09,050 Jeg vil zoome ind, og desværre det kommer til at rulle ud af skærmbilledet. 507 00:22:09,050 --> 00:22:15,060 Men vi ser en hel diagrammet, hvor et kort til 97, B-kort til 98, 508 00:22:15,060 --> 00:22:18,931 og hvis vi rulle yderligere op En selvfølgelig kort til 65. 509 00:22:18,931 --> 00:22:21,180 Så er det kun at sige, at hvad vi har prædiket, 510 00:22:21,180 --> 00:22:25,310 der er denne ækvivalens, er faktisk er tilfældet i virkeligheden. 511 00:22:25,310 --> 00:22:28,000 Så en hurtig ændring af dette. 512 00:22:28,000 --> 00:22:31,220 Lad mig åbne op ascii-1.c. 513 00:22:31,220 --> 00:22:38,070 Og bemærk denne smarte, sortere af, afklaring af dette. 514 00:22:38,070 --> 00:22:41,770 Dette er ASCII-1.c, og bemærke dette vanvittige ting. 515 00:22:41,770 --> 00:22:45,120 >> Og dette virkelig får til hjertet af, hvad computere gør. 516 00:22:45,120 --> 00:22:48,150 Selvom vi mennesker ville tæller ikke med i form af letters-- 517 00:22:48,150 --> 00:22:50,380 Jeg kan ikke begynde at tænke, okay en dengang B, 518 00:22:50,380 --> 00:22:52,590 og anvende dem til at tælle fysiske objekter. 519 00:22:52,590 --> 00:22:58,680 Du kan helt sikkert sige, at jeg ønsker at initialisere nogle variabel kaldet C-- 520 00:22:58,680 --> 00:23:03,220 men jeg kunne have kaldt dette noget, vi kan så C er initialiseret til kapital A. 521 00:23:03,220 --> 00:23:07,560 >> Fordi i slutningen af ​​dagen, er computeren er ligeglad, hvad du opbevaring, 522 00:23:07,560 --> 00:23:10,170 det kun bekymrer sig, hvordan du vil til at forelægge disse oplysninger. 523 00:23:10,170 --> 00:23:13,560 Hvordan du ønsker at computeren fortolke dette mønster af bits? 524 00:23:13,560 --> 00:23:16,320 Så det er ikke noget, jeg generelt vil anbefale gør. 525 00:23:16,320 --> 00:23:19,500 Det er virkelig bare et eksempel for formidle, at du kan absolut 526 00:23:19,500 --> 00:23:22,049 initialisere et heltal til en char. 527 00:23:22,049 --> 00:23:24,090 Fordi under hætte af en char, selvfølgelig, 528 00:23:24,090 --> 00:23:26,170 er bare et tal fra 0 til 255. 529 00:23:26,170 --> 00:23:28,540 >> Så du kan sikkert sætte det inde i en int. 530 00:23:28,540 --> 00:23:30,890 Og hvad dette også viser, er, at vi 531 00:23:30,890 --> 00:23:34,040 kan konverteres fra en type til en anden, her 532 00:23:34,040 --> 00:23:36,780 i sidste ende at udskrive det samme. 533 00:23:36,780 --> 00:23:44,760 Og i virkeligheden er denne jeg vil fastsætte online-- skulle sige det igen, her. 534 00:23:44,760 --> 00:23:48,610 Lad mig rydde op online, og vi vil se i en online gennemgang efter behov, 535 00:23:48,610 --> 00:23:50,280 hvad der var hensigten der. 536 00:23:50,280 --> 00:23:50,960 >> OK. 537 00:23:50,960 --> 00:23:53,892 Så sidste eksempel nu involverer A'er og BS og så vil vi 538 00:23:53,892 --> 00:23:54,850 tage tingene op et hak. 539 00:23:54,850 --> 00:23:58,330 Så med en A'er og B'er og K'er i kapitalisering 540 00:23:58,330 --> 00:24:01,560 og ligestilling, og lad os tage et kig på dette eksempel her. 541 00:24:01,560 --> 00:24:02,752 Endnu kode eksempel. 542 00:24:02,752 --> 00:24:04,460 Vi åbner en, der er allerede er foretaget, så vi 543 00:24:04,460 --> 00:24:06,440 behøver ikke at skrive det alle ud fra bunden. 544 00:24:06,440 --> 00:24:09,420 >> Og bemærk i forventning vi bruger flere header 545 00:24:09,420 --> 00:24:13,240 filer, blandt hvilke er vores nye ven, string.h. 546 00:24:13,240 --> 00:24:15,597 Nu ser ved første øjekast lidt kryptisk. 547 00:24:15,597 --> 00:24:18,180 Men lad os se om vi ikke kan ræsonnere gennem, hvad der foregår her. 548 00:24:18,180 --> 00:24:21,150 Først får jeg en streng fra brugeren, og jeg satte denne streng i en variabel 549 00:24:21,150 --> 00:24:22,286 kaldet filtre. 550 00:24:22,286 --> 00:24:24,090 Copy paste fra før. 551 00:24:24,090 --> 00:24:27,250 På linje 22, jeg er åbenbart gør præcis, hvad 552 00:24:27,250 --> 00:24:30,760 Jeg gjorde for et øjeblik siden, jeg iteration i løbet af de tegn i sek. 553 00:24:30,760 --> 00:24:34,780 >> Og de nye tricks her bruger streng længde, mindre optimering 554 00:24:34,780 --> 00:24:37,930 lagre strengen længde i n, snarere end at ringe strlen igen, 555 00:24:37,930 --> 00:24:38,850 og igen og igen. 556 00:24:38,850 --> 00:24:41,120 Og bare at kontrollere, at jeg er mindre end n. 557 00:24:41,120 --> 00:24:43,330 Nu her, tingene bliver lidt interessant. 558 00:24:43,330 --> 00:24:45,980 Men det er bare en ansøgning af denne samme ny idé. 559 00:24:45,980 --> 00:24:48,470 Hvad i engelsk gør s beslag jeg repræsenterer? 560 00:24:48,470 --> 00:24:51,772 561 00:24:51,772 --> 00:24:54,260 >> Publikum: Tælle hver karakter [uhørligt]. 562 00:24:54,260 --> 00:24:55,926 >> David J. MALAN: Tælle hver karakter. 563 00:24:55,926 --> 00:24:58,680 Og endnu mere kortfattet, s beslag jeg repræsenterer hvad? 564 00:24:58,680 --> 00:25:00,950 Ville du sige. 565 00:25:00,950 --> 00:25:04,084 Ikke at sætte dig på stedet her. 566 00:25:04,084 --> 00:25:06,375 >> Publikum: Well-- 567 00:25:06,375 --> 00:25:09,500 David J. MALAN: Så hvis ordet er-- hvis strengen er Zamyla, som starts-- 568 00:25:09,500 --> 00:25:12,380 Publikum: --you håndtere tegnene separately-- 569 00:25:12,380 --> 00:25:13,690 David J. MALAN: Godt. 570 00:25:13,690 --> 00:25:14,190 Præcis. 571 00:25:14,190 --> 00:25:17,940 Den firkantede beslag notation giver dig at få adgang til hver karakter individuelt, 572 00:25:17,940 --> 00:25:21,120 så s beslag 0 vil være den første tegn i strengen. 573 00:25:21,120 --> 00:25:24,110 s beslag 1 vil være den anden og så videre. 574 00:25:24,110 --> 00:25:28,050 Så spørgsmålet jeg spørger, her, i denne tilstand er hvad? 575 00:25:28,050 --> 00:25:33,984 Er i'te karakter s større end eller lig med små bogstaver en? 576 00:25:33,984 --> 00:25:36,400 Og hvad betyder det her, med de dobbelte ampersands? 577 00:25:36,400 --> 00:25:36,800 PUBLIKUM (sammen): Og. 578 00:25:36,800 --> 00:25:37,210 David J. MALAN: Og. 579 00:25:37,210 --> 00:25:38,418 Det er bare svarer til dette. 580 00:25:38,418 --> 00:25:42,310 Og er det ikke et nøgleord i C, er du nødt til brug, irriterende, tegnet tegnet. 581 00:25:42,310 --> 00:25:47,520 Og det omvendt, beder er s'er i'te karakter mindre end eller lig 582 00:25:47,520 --> 00:25:49,030 til små bogstaver z? 583 00:25:49,030 --> 00:25:52,440 Og igen, det er her forstå den underliggende 584 00:25:52,440 --> 00:25:54,550 gennemførelse af en computer giver mening. 585 00:25:54,550 --> 00:25:57,330 Bemærk, at selvom jeg har dot dot dot derovre, 586 00:25:57,330 --> 00:26:04,410 ligner en gennem z små bogstaver er alle sammenhængende værdier op fra 97 på op. 587 00:26:04,410 --> 00:26:07,820 >> Og samme for store bogstaver, der starter ved 65. 588 00:26:07,820 --> 00:26:10,410 Så takeaway, så er det på engelsk, 589 00:26:10,410 --> 00:26:12,760 hvordan vil du beskrive hvilken linje 24 gør? 590 00:26:12,760 --> 00:26:15,736 591 00:26:15,736 --> 00:26:16,728 Ja? 592 00:26:16,728 --> 00:26:21,575 >> Publikum: Den 24. er det at kontrollere at se , om hver karakter er en små bogstaver. 593 00:26:21,575 --> 00:26:24,700 David J. MALAN: Det er at kontrollere, om Hver karakter er et lille bogstav. 594 00:26:24,700 --> 00:26:28,590 Så endnu mere kortfattet, er den i'te karakter småbogstavs? 595 00:26:28,590 --> 00:26:30,690 Det er alt, vi er udtrykker her logisk, 596 00:26:30,690 --> 00:26:33,750 lidt kryptisk, men i sidste ende temmelig ligefremt. 597 00:26:33,750 --> 00:26:36,480 Er s'er i'te karakter små bogstaver? 598 00:26:36,480 --> 00:26:40,130 >> Hvis ja, og her er, hvor tingene få en lille sind bøjning 599 00:26:40,130 --> 00:26:44,760 for bare et øjeblik, hvis det er tilfældet, gå videre og udskrive et tegn. 600 00:26:44,760 --> 00:26:47,360 Så dette er blot en pladsholder, men hvad karakter? 601 00:26:47,360 --> 00:26:53,710 Hvorfor gør jeg s beslag jeg minus dette udtryk her? 602 00:26:53,710 --> 00:26:55,110 >> Godt mærke til mønsteret her. 603 00:26:55,110 --> 00:26:57,380 De faktiske tal ikke betyder så meget. 604 00:26:57,380 --> 00:27:02,700 Men bemærk, at 97 er hvor langt væk fra 65? 605 00:27:02,700 --> 00:27:03,560 >> Publikum: 32. 606 00:27:03,560 --> 00:27:04,480 >> David J. MALAN: 32. 607 00:27:04,480 --> 00:27:06,890 Hvor langt væk er 98 fra 66? 608 00:27:06,890 --> 00:27:07,740 >> Publikum: 32. 609 00:27:07,740 --> 00:27:09,890 >> David J. MALAN: Lille C fra Big C? 610 00:27:09,890 --> 00:27:10,420 32. 611 00:27:10,420 --> 00:27:14,550 Så der er 32 humle fra et brev til en anden. 612 00:27:14,550 --> 00:27:17,790 Så ærligt jeg, kunne forenkle denne til det. 613 00:27:17,790 --> 00:27:20,400 Men så er jeg lidt svært kodning dette lave niveau forståelse 614 00:27:20,400 --> 00:27:21,740 at ingen læser nogensinde vil forstå. 615 00:27:21,740 --> 00:27:25,080 Så jeg har tænkt mig at generalisere det som, jeg kender de små bogstaver er større. 616 00:27:25,080 --> 00:27:28,400 Jeg kender de store bogstaver er mindre værdier, ironisk nok. 617 00:27:28,400 --> 00:27:33,216 >> Men det er faktisk svarer til sige trække 32 fra filtre beslag i. 618 00:27:33,216 --> 00:27:35,430 Så i forbindelse med disse breve, hvis brevet 619 00:27:35,430 --> 00:27:38,950 sker for at være en, små bogstaver en, og jeg trække 32, 620 00:27:38,950 --> 00:27:43,442 Hvilken effekt har det har, matematisk på små bogstaver en? 621 00:27:43,442 --> 00:27:44,400 Publikum: Capitalizes-- 622 00:27:44,400 --> 00:27:45,691 David J. MALAN: udnytter det. 623 00:27:45,691 --> 00:27:48,440 Og ja, det er derfor vores program kaldes kapitalisere nul. 624 00:27:48,440 --> 00:27:51,590 Dette program enten kapitaliserer et brev, 625 00:27:51,590 --> 00:27:54,580 efter kontrol, hvis det er faktisk et lille bogstav. 626 00:27:54,580 --> 00:27:59,810 Ellers i linje 30, hvad skal jeg gøre, hvis det er ikke et lille bogstav, som jeg er 627 00:27:59,810 --> 00:28:02,852 ser på ved en bestemt iteration i sløjfen. 628 00:28:02,852 --> 00:28:03,890 Bare printe det ud. 629 00:28:03,890 --> 00:28:07,010 >> Så du skal ikke ændre ting det er ikke engang små bogstaver. 630 00:28:07,010 --> 00:28:10,790 Begræns dig selv til lille en gennem lidt z. 631 00:28:10,790 --> 00:28:12,730 Nu er dette er temmelig mystisk. 632 00:28:12,730 --> 00:28:15,230 Men i slutningen af ​​dagen, dette er, hvordan vi, engang, 633 00:28:15,230 --> 00:28:16,460 skulle gennemføre ting. 634 00:28:16,460 --> 00:28:19,780 Hvis jeg i stedet åbne udnytte en, åh gudskelov. 635 00:28:19,780 --> 00:28:22,320 Der er en funktion kaldet til den øvre, der kan 636 00:28:22,320 --> 00:28:25,410 gøre alt, hvad vi lige gjorde på et forholdsvis lavt niveau. 637 00:28:25,410 --> 00:28:28,752 >> Nu til øverste er interessant fordi den er erklæret i en fil, 638 00:28:28,752 --> 00:28:31,210 og du ville kun kender dette ved at kontrollere den dokumentation, 639 00:28:31,210 --> 00:28:35,730 eller at vide, sige, i klassen, hvor det findes i en fil kaldet ctype.h. 640 00:28:35,730 --> 00:28:37,630 Så dette er en anden ny ven af ​​vores. 641 00:28:37,630 --> 00:28:40,750 Og til øverste gør nøjagtigt hvad navnet antyder. 642 00:28:40,750 --> 00:28:44,860 >> Du kan passere i, som et argument, mellem disse parenteser, nogle tegn. 643 00:28:44,860 --> 00:28:48,390 Jeg har tænkt mig at passere i den i'te karakter S bruger vores smarte nye notation 644 00:28:48,390 --> 00:28:49,870 involverer firkantede parenteser. 645 00:28:49,870 --> 00:28:53,391 Og tage et gæt, hvad er afkastet værdi til øverste tilsyneladende vil 646 00:28:53,391 --> 00:28:53,890 at være? 647 00:28:53,890 --> 00:28:56,460 648 00:28:56,460 --> 00:28:57,770 Et stort bogstav. 649 00:28:57,770 --> 00:28:58,620 Et stort bogstav. 650 00:28:58,620 --> 00:29:02,330 >> Så hvis jeg går med små bogstaver a, forhåbentlig ved definition af til øverste, 651 00:29:02,330 --> 00:29:05,600 det kommer til at returnere en store bogstaver A. Ellers 652 00:29:05,600 --> 00:29:08,590 hvis det ikke er et lille bogstav det første sted, jeg bare printe den ud. 653 00:29:08,590 --> 00:29:10,800 Og ja, bemærk anden ven her. 654 00:29:10,800 --> 00:29:13,840 Ikke bare til øverste findes, men er lavere, hvilket 655 00:29:13,840 --> 00:29:16,200 faktisk besvarer dette spørgsmål for mig. 656 00:29:16,200 --> 00:29:19,730 >> Nu hvem skrev disse ting, 10s år siden, ved du hvad? 657 00:29:19,730 --> 00:29:23,840 Gennemført til øvre og er lavere hjælp af kode som denne. 658 00:29:23,840 --> 00:29:27,270 Men igen, i overensstemmelse med denne idé om at abstrahere væk, 659 00:29:27,270 --> 00:29:29,190 slags, lavere niveau gennemførelse detaljer. 660 00:29:29,190 --> 00:29:32,600 Og stå på skuldrene af mennesker der kom før os, ved hjælp af funktioner 661 00:29:32,600 --> 00:29:36,300 gerne øvre og er lavere, hvilket vidunderligt nok er pænt 662 00:29:36,300 --> 00:29:40,190 opkaldt at sige, hvad de gør, er en vidunderlig paradigme at vedtage. 663 00:29:40,190 --> 00:29:44,040 >> Nu viser det sig, at hvis jeg læser manden siden for, siger, at øvre, 664 00:29:44,040 --> 00:29:45,010 Jeg lærer noget andet. 665 00:29:45,010 --> 00:29:46,890 Så mand toupper. 666 00:29:46,890 --> 00:29:48,050 Det er lidt overvældende. 667 00:29:48,050 --> 00:29:51,110 Men varsel, her er der omtale af header fil, som jeg skal bruge. 668 00:29:51,110 --> 00:29:54,460 Som en sidebemærkning, fordi dette er misvisende, den funktion 669 00:29:54,460 --> 00:29:59,070 bruger int'er stedet for tegn af hensyn til fejlkontrol. 670 00:29:59,070 --> 00:30:01,260 Men vi vil måske komme tilbage til det i fremtiden. 671 00:30:01,260 --> 00:30:05,910 >> Men bemærk, her, til øverste konvertitter bogstavet C til store bogstaver, hvis muligt. 672 00:30:05,910 --> 00:30:07,674 Så det er temmelig ligetil. 673 00:30:07,674 --> 00:30:09,340 Og lad os nu være lidt mere specifik. 674 00:30:09,340 --> 00:30:12,750 Lad os se på den del af man-side under returværdi. 675 00:30:12,750 --> 00:30:15,420 Den returnerede værdi er, at Den konverterede brev. 676 00:30:15,420 --> 00:30:18,690 Eller C, hvis omregningen var ikke muligt, 677 00:30:18,690 --> 00:30:20,250 hvor c er den oprindelige indgang. 678 00:30:20,250 --> 00:30:24,140 Hvilket jeg kender herfra, fra Argumentet om til øverste. 679 00:30:24,140 --> 00:30:25,780 >> Så hvad er takeaway dette? 680 00:30:25,780 --> 00:30:28,060 Den returnerede værdi er, at af den konverterede brev, 681 00:30:28,060 --> 00:30:32,110 eller C, det oprindelige brev, hvis omdannelsen var ikke muligt. 682 00:30:32,110 --> 00:30:36,460 Hvad forbedring kan jeg derfor gøre til min kode design? 683 00:30:36,460 --> 00:30:37,146 Ja? 684 00:30:37,146 --> 00:30:38,810 >> Publikum: Du kan fjerne steder. 685 00:30:38,810 --> 00:30:40,810 David J. MALAN: Jeg kan fjerne andet udsagn, 686 00:30:40,810 --> 00:30:42,510 og ikke bare andet udsagn. 687 00:30:42,510 --> 00:30:44,150 >> Publikum: Du kan fjerne [uhørligt]. 688 00:30:44,150 --> 00:30:46,310 >> David J. MALAN: Jeg kan fjerne hele gaffel 689 00:30:46,310 --> 00:30:48,209 i vejen, hvis ellers helt. 690 00:30:48,209 --> 00:30:50,250 Så ja, lad mig åbne den endelige version af dette, 691 00:30:50,250 --> 00:30:55,540 kapitalisere-2 og lægge mærke til, hvor, hvis du vil, sexet, koden får nu, 692 00:30:55,540 --> 00:31:00,040 i, at jeg har reduceret fra nogle syv eller deromkring linjer til kun fire, 693 00:31:00,040 --> 00:31:03,850 den funktionalitet, som jeg bestemt ved blot at kalde til øverste, 694 00:31:03,850 --> 00:31:09,410 passerer s beslag i, og udskrivning ud, med pladsholder% c, 695 00:31:09,410 --> 00:31:11,090 at særlig karakter. 696 00:31:11,090 --> 00:31:14,560 >> Nu velsagtens, der er en fejl, eller i det mindste risiko for en bug, 697 00:31:14,560 --> 00:31:15,350 i dette program. 698 00:31:15,350 --> 00:31:18,200 Så bare for at komme tilbage til en tidligere takeaway, 699 00:31:18,200 --> 00:31:21,820 hvad skal jeg nok også gøre i dette program til at gøre det mere robust, 700 00:31:21,820 --> 00:31:24,974 så der er ingen måde, det kan ned, selv i sjældne tilfælde? 701 00:31:24,974 --> 00:31:26,390 Publikum: Sørg for at det ikke er NULL. 702 00:31:26,390 --> 00:31:28,056 David J. MALAN: Sørg for at det ikke er NULL. 703 00:31:28,056 --> 00:31:31,030 Så virkelig, at gøre denne super korrekt, jeg bør gøre noget lignende, 704 00:31:31,030 --> 00:31:35,300 hvis s er ikke NULL, så gå videre og udføre 705 00:31:35,300 --> 00:31:38,470 disse linjer kode, som Jeg kan så led som det, 706 00:31:38,470 --> 00:31:39,870 og derefter sat i min nære tandbøjle. 707 00:31:39,870 --> 00:31:41,550 Så god tying sammen af ​​de to ideer. 708 00:31:41,550 --> 00:31:42,429 Ja? 709 00:31:42,429 --> 00:31:44,470 PUBLIKUM: Kan du bruge a gøre, mens løkke, i stedet? 710 00:31:44,470 --> 00:31:47,270 David J. MALAN: Kunne Jeg gør en gør while-løkke? 711 00:31:47,270 --> 00:31:50,020 Publikum: --you ønsker at sikre at du rent faktisk [uhørligt]. 712 00:31:50,020 --> 00:31:51,728 David J. MALAN: Kunne du bruger en gøre, mens? 713 00:31:51,728 --> 00:31:52,450 Korte svar, nej. 714 00:31:52,450 --> 00:31:54,700 Fordi du er ved at introducere et andet hjørne sag. 715 00:31:54,700 --> 00:31:56,660 Hvis strengen er nul længde. 716 00:31:56,660 --> 00:31:59,600 Hvis eksempelvis jeg bare ramt Enter, uden nogensinde at skrive Zamyla. 717 00:31:59,600 --> 00:32:02,490 Jeg har tænkt mig at overgive dig tilbage en egentlig streng, som vi til sidst vil se, 718 00:32:02,490 --> 00:32:03,780 der har nul tegn. 719 00:32:03,780 --> 00:32:05,630 Det er stadig en streng, det er bare super kort. 720 00:32:05,630 --> 00:32:07,960 Men hvis du bruger et gøre, mens, du kommer til at blindt 721 00:32:07,960 --> 00:32:10,050 forsøge at gøre noget med hensyn til denne streng, 722 00:32:10,050 --> 00:32:12,537 og intet kommer til at være der. 723 00:32:12,537 --> 00:32:18,607 >> PUBLIKUM: Jamen, hvis du gjorde gøre [uhørligt], mens S-- 724 00:32:18,607 --> 00:32:21,190 David J. MALAN: Åh jeg se, holde få en streng fra brugeren. 725 00:32:21,190 --> 00:32:23,525 Så korte svar, du kunne, og holde plage 726 00:32:23,525 --> 00:32:26,150 dem til at give dig en streng, der er kort nok til at passe i hukommelsen. 727 00:32:26,150 --> 00:32:26,700 Absolut. 728 00:32:26,700 --> 00:32:27,630 Jeg valgte bare at lade være. 729 00:32:27,630 --> 00:32:30,505 Hvis de ikke give mig strengen jeg ønsker, jeg holde op, jeg giver op. 730 00:32:30,505 --> 00:32:33,260 Men absolut, til dette formål, du kunne absolut gøre det. 731 00:32:33,260 --> 00:32:37,500 >> Så bibliotekets header-filer, der vi nu kender, er disse, her. 732 00:32:37,500 --> 00:32:41,550 Standard I / O, CS50.h, string.h, ctype.h, og der er faktisk andre. 733 00:32:41,550 --> 00:32:44,460 Nogle af jer har opdaget math-biblioteket i math.h. 734 00:32:44,460 --> 00:32:48,200 Men lad mig introducere dig, nu, at denne ressource, CS50 personale, Davin, 735 00:32:48,200 --> 00:32:50,630 og Rob, og Gabe særlig har sat sammen. 736 00:32:50,630 --> 00:32:52,630 Det vil snart link på kursets hjemmeside. 737 00:32:52,630 --> 00:32:54,870 Det hedder CS50 reference. 738 00:32:54,870 --> 00:32:58,230 >> Hvilket bare for at give dig en hurtig forsmag på det, virker som følger. 739 00:32:58,230 --> 00:33:00,740 Lad mig gå til reference.cs50.net. 740 00:33:00,740 --> 00:33:02,990 Du kan se på venstre side en overvældende liste 741 00:33:02,990 --> 00:33:04,595 funktioner, der kommer med ca. 742 00:33:04,595 --> 00:33:07,790 Men hvis jeg ligeglad, for øjeblikket, om noget lignende strlen, 743 00:33:07,790 --> 00:33:08,746 Jeg kan skrive det der. 744 00:33:08,746 --> 00:33:10,870 Det filtrerer ned på listen til lige hvad jeg ligeglad. 745 00:33:10,870 --> 00:33:11,940 Jeg har tænkt mig at klikke på det. 746 00:33:11,940 --> 00:33:14,740 Og nu til venstre, du vil se, hvad vi håber 747 00:33:14,740 --> 00:33:18,290 er en mere enkel, menneske venlige forklaring på, hvordan 748 00:33:18,290 --> 00:33:19,170 denne funktion virker. 749 00:33:19,170 --> 00:33:20,600 >> Returnerer længden af ​​en streng. 750 00:33:20,600 --> 00:33:24,060 Her er en synopsis, her er hvordan du bruge det i form af header fil, 751 00:33:24,060 --> 00:33:27,430 og med hensyn til hvad funktionen ligner i form af sine argumenter. 752 00:33:27,430 --> 00:33:30,250 Og så her, vender tilbage længden af ​​en streng. 753 00:33:30,250 --> 00:33:34,280 Men for dem af jer, mere komfortabel, du kan faktisk klikker mere komfortabel, 754 00:33:34,280 --> 00:33:37,070 og indholdet af denne side, nu vil ændre sig 755 00:33:37,070 --> 00:33:41,660 at være standardværdier hvad du få ved at bruge man-siden. 756 00:33:41,660 --> 00:33:44,100 >> Med andre ord, CS50 reference er en forenkling 757 00:33:44,100 --> 00:33:46,220 af mand sider ved det personale, for studerende. 758 00:33:46,220 --> 00:33:49,320 Især de mindre behagelig og i mellem, så du 759 00:33:49,320 --> 00:33:51,660 behøver ikke at forsøge at vikle dit sind rundt, helt ærligt, 760 00:33:51,660 --> 00:33:55,030 nogle temmelig kryptiske syntaks og dokumentation engang. 761 00:33:55,030 --> 00:33:57,650 >> Så holder det i tankerne i de kommende dage. 762 00:33:57,650 --> 00:33:59,560 Så her, igen, er en Zamyla. 763 00:33:59,560 --> 00:34:03,255 Lad os nu stille et spørgsmål, der er lidt mere menneskelig tilgængelige. 764 00:34:03,255 --> 00:34:05,380 Tak til Chang, der har været udskrivning flere elefanter 765 00:34:05,380 --> 00:34:07,090 uafbrudt i de sidste par dage. 766 00:34:07,090 --> 00:34:09,730 Vi har en mulighed for at give mindst én af dem væk. 767 00:34:09,730 --> 00:34:13,239 Hvis vi kunne få bare en volontør at komme videre op til at tegne på skærmen. 768 00:34:13,239 --> 00:34:14,530 Hvad med her? 769 00:34:14,530 --> 00:34:15,340 >> Kom op. 770 00:34:15,340 --> 00:34:16,720 Hvad er dit navn? 771 00:34:16,720 --> 00:34:17,219 ALEX: Alex. 772 00:34:17,219 --> 00:34:17,760 David J. MALAN: Alex. 773 00:34:17,760 --> 00:34:18,259 Okay. 774 00:34:18,259 --> 00:34:19,388 Alex, kom op. 775 00:34:19,388 --> 00:34:21,679 Vi er ved at se din skriften på skærmen her. 776 00:34:21,679 --> 00:34:24,325 777 00:34:24,325 --> 00:34:25,570 Okay, rart at møde dig. 778 00:34:25,570 --> 00:34:26,429 >> ALEX: Nice du møde dig. 779 00:34:26,429 --> 00:34:27,512 >> David J. MALAN: Okay. 780 00:34:27,512 --> 00:34:28,969 Så super enkel øvelse. 781 00:34:28,969 --> 00:34:31,440 Bar er ikke høj for få en elefant i dag. 782 00:34:31,440 --> 00:34:33,439 Du spiller rollen som getString. 783 00:34:33,439 --> 00:34:35,980 Og jeg har tænkt mig at bare fortælle dig den streng, du har fået. 784 00:34:35,980 --> 00:34:38,080 Og antage, at du, getString, er blevet kaldt. 785 00:34:38,080 --> 00:34:42,480 Og mennesket, ligesom mig, har skrevet i Zamyla, Z-A-M-Y-L-A. 786 00:34:42,480 --> 00:34:45,650 Bare gå videre og skrive Zamyla på skærm, som om du har fået det 787 00:34:45,650 --> 00:34:47,250 og gemt det et eller andet sted i hukommelsen. 788 00:34:47,250 --> 00:34:52,370 789 00:34:52,370 --> 00:34:55,570 >> Giver plads til, hvad der vil være flere andre words-- det er OK, holde i gang. 790 00:34:55,570 --> 00:34:59,620 >> [Latter] 791 00:34:59,620 --> 00:35:00,800 >> Så Zamyla, fremragende. 792 00:35:00,800 --> 00:35:04,880 Så nu antage, at du, getString, kaldes igen. 793 00:35:04,880 --> 00:35:09,350 Og derfor, jeg giver dig, ved tastatur, med et andet navn, Belinda. 794 00:35:09,350 --> 00:35:17,560 795 00:35:17,560 --> 00:35:18,060 Okay. 796 00:35:18,060 --> 00:35:22,380 Og nu, næste gang getString er kaldes, jeg skriver i noget lignende Gabe, 797 00:35:22,380 --> 00:35:27,560 G-A-B-E. Du er virkelig tager til hjerte random access memory. 798 00:35:27,560 --> 00:35:29,631 Hvilket trækker alt helt tilfældigt. 799 00:35:29,631 --> 00:35:30,130 OK. 800 00:35:30,130 --> 00:35:31,104 >> [Latter] 801 00:35:31,104 --> 00:35:32,520 ALEX: Beklager min håndskrift er dårlig. 802 00:35:32,520 --> 00:35:33,770 David J. MALAN: Nej, det er OK. 803 00:35:33,770 --> 00:35:40,480 Og hvad med Rob, R-O-B. OK. 804 00:35:40,480 --> 00:35:41,020 Godt. 805 00:35:41,020 --> 00:35:43,853 Så jeg ikke forventer, at du ville slags lægge ting ud på denne måde. 806 00:35:43,853 --> 00:35:45,020 Men vi kan gøre dette arbejde. 807 00:35:45,020 --> 00:35:48,810 Så hvordan har du gå om om disse tegn i hukommelsen? 808 00:35:48,810 --> 00:35:51,310 Med andre ord, hvis vi tænker på denne rektangulære sort skærm 809 00:35:51,310 --> 00:35:53,550 som repræsenterer en computerens RAM, eller hukommelse. 810 00:35:53,550 --> 00:35:55,850 >> Og minde om, at RAM er bare en hel bunke af bytes, 811 00:35:55,850 --> 00:35:57,480 og bytes er en hel masse af bits. 812 00:35:57,480 --> 00:35:59,350 Og bits er en eller anden måde gennemføres generelt 813 00:35:59,350 --> 00:36:01,119 med en form for elektricitet i hardware. 814 00:36:01,119 --> 00:36:03,160 Så det er en slags den lagdeling vi har talt om 815 00:36:03,160 --> 00:36:04,510 og kan nu tage for givet. 816 00:36:04,510 --> 00:36:07,020 Hvordan har du gå om afgør, hvor at skrive 817 00:36:07,020 --> 00:36:11,634 Rob versus Gabe versus Belinda versus Zamyla? 818 00:36:11,634 --> 00:36:14,020 >> ALEX: Jeg gjorde det bare i påbyde, at du fortalte mig. 819 00:36:14,020 --> 00:36:15,650 >> David J. MALAN: Og det er sandt. 820 00:36:15,650 --> 00:36:20,100 Men hvad er reguleret, hvor du lægger Belinda navn og Gabe navn? 821 00:36:20,100 --> 00:36:20,764 >> ALEX: Ingenting? 822 00:36:20,764 --> 00:36:22,930 David J. MALAN: [griner] Så det virker, det er fint. 823 00:36:22,930 --> 00:36:25,290 Så computere er lidt mere velordnet end. 824 00:36:25,290 --> 00:36:29,000 Og så når vi implement-- bo der for bare en moment-- når vi faktisk 825 00:36:29,000 --> 00:36:31,470 gennemføre noget lignende getString i en computer, 826 00:36:31,470 --> 00:36:34,480 Zamyla kunne lægges ud temmelig meget ligesom du gjorde på skærmen, der. 827 00:36:34,480 --> 00:36:36,660 >> Og hvad er nøglen til at lægge mærke til her, hvad Alex gjorde, 828 00:36:36,660 --> 00:36:40,260 er der er lidt af en afgrænsning blandt hver af disse ord, ikke? 829 00:36:40,260 --> 00:36:46,580 Du har ikke skrive Z-A-M-Y-L-A-B-E-L-I-N-D-A-G-A-B-- 830 00:36:46,580 --> 00:36:49,740 med andre ord, der er en slags grænselinie som synes at være, 831 00:36:49,740 --> 00:36:52,370 slags, tilfældig afstand mellem disse forskellige ord. 832 00:36:52,370 --> 00:36:54,120 Men det er godt, fordi vi mennesker kan nu 833 00:36:54,120 --> 00:36:56,470 visualisere, at der er fire forskellige strenge. 834 00:36:56,470 --> 00:36:59,540 Det er ikke bare en sekvens af masser af tegn. 835 00:36:59,540 --> 00:37:04,190 Så en computer, så, i mellemtiden, kan tage en streng som Zamyla, 836 00:37:04,190 --> 00:37:07,220 sætte hver af disse breve indersiden af ​​en byte hukommelse. 837 00:37:07,220 --> 00:37:10,400 Men dette tal er meget større, selvfølgelig end seks tegn. 838 00:37:10,400 --> 00:37:11,690 >> Der er en hel bunke af RAM. 839 00:37:11,690 --> 00:37:15,330 Og så fremover, dette gitter af bokse går 840 00:37:15,330 --> 00:37:17,560 at repræsentere hvad Alex bare gjorde her på skærmen. 841 00:37:17,560 --> 00:37:20,937 Og nu, Alex, vi kan tilbyde dig en blå eller en orange elefant fra Chang. 842 00:37:20,937 --> 00:37:22,270 ALEX: Jeg tager en blå elefant. 843 00:37:22,270 --> 00:37:23,120 David J. MALAN: En blå elefant. 844 00:37:23,120 --> 00:37:25,580 Så en stor runde af bifald, hvis vi kunne, for Alex her. 845 00:37:25,580 --> 00:37:26,100 >> [Applaus] 846 00:37:26,100 --> 00:37:26,766 >> ALEX: Tak. 847 00:37:26,766 --> 00:37:28,820 David J. MALAN: Tak. 848 00:37:28,820 --> 00:37:36,230 Så takeaway er, at selv om mønster slags ændret sig over tid, her 849 00:37:36,230 --> 00:37:40,430 på tavlen, var der denne afgrænsning mellem de forskellige strenge 850 00:37:40,430 --> 00:37:42,610 at Alex fik for os. 851 00:37:42,610 --> 00:37:45,230 Nu computere, helt ærligt, kunne gøre det samme. 852 00:37:45,230 --> 00:37:48,210 De kunne slags plask strygere overalt i RAM. 853 00:37:48,210 --> 00:37:50,710 Heroppe, herovre, hernede, hernede. 854 00:37:50,710 --> 00:37:52,020 >> De kunne gøre netop dette. 855 00:37:52,020 --> 00:37:54,280 Men selvfølgelig, det er sandsynligvis ikke den bedste planlægning. 856 00:37:54,280 --> 00:37:54,780 Right? 857 00:37:54,780 --> 00:37:57,340 Hvis jeg holdt beder Alex til få navne, formentlig ville han 858 00:37:57,340 --> 00:38:01,370 sætte nogle mere hernede, måske op her, herovre, herovre, til sidst 859 00:38:01,370 --> 00:38:02,211 herovre. 860 00:38:02,211 --> 00:38:05,460 Men med en smule mere planlægning, i hvert fald, vi kunne lægge tingene ud mere rent. 861 00:38:05,460 --> 00:38:07,350 Og ja, det er hvad en computer gør. 862 00:38:07,350 --> 00:38:10,720 >> Men fangsten er, at hvis den næste streng jeg får 863 00:38:10,720 --> 00:38:14,050 efter Zamyla er noget ligesom Belinda, 864 00:38:14,050 --> 00:38:17,929 foreslå, hvor vi kan skrive brev b med hensyn til dette net? 865 00:38:17,929 --> 00:38:18,720 Hvor ville du gå? 866 00:38:18,720 --> 00:38:21,480 Til højre for en, under z, under en? 867 00:38:21,480 --> 00:38:23,204 Hvad ville dit første instinkter være? 868 00:38:23,204 --> 00:38:24,120 Publikum: Under z. 869 00:38:24,120 --> 00:38:25,100 David J. MALAN: Så under z. 870 00:38:25,100 --> 00:38:26,530 Og det er temmelig ligetil, ikke? 871 00:38:26,530 --> 00:38:29,321 Det er slags nydelige, det er hvad vi gør på et tastatur, når vi trykker på Enter, 872 00:38:29,321 --> 00:38:31,770 eller en e-mail, når du foretager et punktopstilling af tingene. 873 00:38:31,770 --> 00:38:34,310 Men virkeligheden er, at computere prøve at være mere effektive, 874 00:38:34,310 --> 00:38:37,170 og proppe sikkert så meget data i RAM, som muligt, 875 00:38:37,170 --> 00:38:38,890 så du ikke spilder nogen byte. 876 00:38:38,890 --> 00:38:41,545 Så du ikke spilder enhver skærmplads. 877 00:38:41,545 --> 00:38:44,170 Og problemet er imidlertid, at hvis vi bogstaveligt talt satte brev 878 00:38:44,170 --> 00:38:49,940 B efter en, hvordan skal vi ved, hvor Zamyla navn ender 879 00:38:49,940 --> 00:38:51,840 og Belinda navn begynder? 880 00:38:51,840 --> 00:38:55,270 Så du mennesker, ligesom foreslået, ja, ramte på Enter-tasten, hovedsagelig. 881 00:38:55,270 --> 00:38:56,410 Sæt det ned nedenfor. 882 00:38:56,410 --> 00:38:59,750 Eller endda som Alex gjorde, bare begynde at skrive det næste navn under den foregående, 883 00:38:59,750 --> 00:39:01,583 og under det ene, og derefter under denne ene. 884 00:39:01,583 --> 00:39:02,510 Det er en visuel cue. 885 00:39:02,510 --> 00:39:05,960 >> Computere har en anden visuel cue, men det er lidt mere kortfattet. 886 00:39:05,960 --> 00:39:07,840 Det er denne funky karakter. 887 00:39:07,840 --> 00:39:11,890 Backslash 0, som måske er minder om omvendt skråstreg n 888 00:39:11,890 --> 00:39:12,640 og så videre, nu. 889 00:39:12,640 --> 00:39:14,120 De særlige escape-sekvenser. 890 00:39:14,120 --> 00:39:19,120 Backslash 0 er vejen for repræsenterer otte nul bits i en række. 891 00:39:19,120 --> 00:39:22,000 0000 0000. 892 00:39:22,000 --> 00:39:26,130 >> Den måde du udtrykker det er ikke at ramte tallet nul på dit tastatur, 893 00:39:26,130 --> 00:39:28,140 fordi det faktisk, der er en ASCII-tegn. 894 00:39:28,140 --> 00:39:30,990 Det ligner et tal, men er faktisk et decimaltal 895 00:39:30,990 --> 00:39:35,910 der repræsenterer den cirkulære glyf, den cirkulære skrifttype. 896 00:39:35,910 --> 00:39:38,410 I mellemtiden backslash nul betyder, bogstaveligt 897 00:39:38,410 --> 00:39:40,700 sætte otte nul byte her for mig. 898 00:39:40,700 --> 00:39:42,136 >> Så dette er noget arbitrær. 899 00:39:42,136 --> 00:39:44,260 Vi kunne have brugt et mønster af bits, men verden 900 00:39:44,260 --> 00:39:46,610 besluttede nogle år siden, til at repræsentere 901 00:39:46,610 --> 00:39:49,710 enden af ​​en streng i hukommelsen, bare sætte en hel masse nuller. 902 00:39:49,710 --> 00:39:51,000 Fordi vi kan opdage det. 903 00:39:51,000 --> 00:39:54,790 Nu, betyder, at ingen skrivelse fra alfabet kan være repræsenteret med nuller. 904 00:39:54,790 --> 00:39:58,480 >> Men det er OK, så har vi allerede set at vi bruger 65 om op i 97 på op. 905 00:39:58,480 --> 00:40:00,290 Vi fik ikke nogen steder Tæt på alle nuller. 906 00:40:00,290 --> 00:40:03,040 907 00:40:03,040 --> 00:40:06,540 Så Belinda i en computers hukommelse er faktisk kommer til at gå her. 908 00:40:06,540 --> 00:40:09,764 Jeg har tegnet det i gul bare at henlede vores opmærksomhed på det. 909 00:40:09,764 --> 00:40:11,680 Og varsel, også dette er fuldstændig vilkårlig. 910 00:40:11,680 --> 00:40:12,680 Jeg har tegnet det som et gitter. 911 00:40:12,680 --> 00:40:14,460 Ligesom, RAM er blot nogle fysiske objekt. 912 00:40:14,460 --> 00:40:17,300 Det behøver ikke nødvendigvis have rækker og kolonner, per se. 913 00:40:17,300 --> 00:40:20,490 Det har lige fået en hel bunke af bytes implementeres i hardware eller anden måde. 914 00:40:20,490 --> 00:40:22,817 Men hvis det efter Belinda jeg skrevet i Gabe navn, 915 00:40:22,817 --> 00:40:25,650 han kommer til at ende op her i hukommelsen, og hvis jeg har skrevet i Daven navn, 916 00:40:25,650 --> 00:40:27,316 for eksempel, han kommer til at ende her. 917 00:40:27,316 --> 00:40:29,310 Og jeg kan fortsætte med at skrive endnu flere navne. 918 00:40:29,310 --> 00:40:32,100 >> Desværre, hvis jeg forsøger at skrive en super lang navn, 919 00:40:32,100 --> 00:40:33,730 Jeg kunne til sidst løbe tør for hukommelse. 920 00:40:33,730 --> 00:40:37,810 I så fald, getString er vil vende tilbage NULL, som vi sagde. 921 00:40:37,810 --> 00:40:41,720 Men heldigvis, i det mindste i denne visuelle her fik vi ikke helt så langt. 922 00:40:41,720 --> 00:40:45,860 >> Nu, hvad der er rart er, at dette generelle idé om at behandle tingene 923 00:40:45,860 --> 00:40:49,720 som værende i kasser er repræsenterer en funktion af C 924 00:40:49,720 --> 00:40:52,690 og en masse sprog, kendt som et array. 925 00:40:52,690 --> 00:40:55,490 Et array er en anden type af data. 926 00:40:55,490 --> 00:40:57,380 Det er en datastruktur, hvis du vil. 927 00:40:57,380 --> 00:41:01,160 Struktur i den forstand, det virkelig, slags, ser gerne en kasse, i det mindste 928 00:41:01,160 --> 00:41:02,320 i dit indre øje. 929 00:41:02,320 --> 00:41:09,680 Et array er en sammenhængende sekvens af identiske datatyper, 930 00:41:09,680 --> 00:41:11,330 tilbage til tilbage til tilbage til tilbage. 931 00:41:11,330 --> 00:41:14,720 >> Så en snor, i andre ord, er en vifte af tegn. 932 00:41:14,720 --> 00:41:16,120 En vifte af tegn. 933 00:41:16,120 --> 00:41:19,070 Men det viser sig, du kan have arrays af klaser af ting. 934 00:41:19,070 --> 00:41:21,870 I virkeligheden, kan vi sætte endnu numre i et array. 935 00:41:21,870 --> 00:41:23,920 Så den form, hvori vi kommer til at starte 936 00:41:23,920 --> 00:41:26,590 erklære disse data struktur er kendt som et array 937 00:41:26,590 --> 00:41:28,250 også kommer til at bruge firkantede parenteser. 938 00:41:28,250 --> 00:41:31,500 Men disse firkantede parenteser vil har forskellig betydning i denne sammenhæng. 939 00:41:31,500 --> 00:41:33,450 >> Og lad os se det som følger. 940 00:41:33,450 --> 00:41:36,780 Antag, at jeg åbnede en ny fil her. 941 00:41:36,780 --> 00:41:38,535 Og jeg gemme denne som ages.c. 942 00:41:38,535 --> 00:41:41,280 943 00:41:41,280 --> 00:41:43,470 Og jeg vil gemme dette i min mappe her. 944 00:41:43,470 --> 00:41:46,130 Og nu jeg har tænkt mig at gå videre og begynde at skrive noget 945 00:41:46,130 --> 00:41:53,940 som omfatter CS50.h omfatter stdio.h, int main tomrum. 946 00:41:53,940 --> 00:41:57,370 Og så inde i her, jeg vil først have en int kaldes alder. 947 00:41:57,370 --> 00:42:01,371 >> Og jeg har tænkt mig at bruge det til at få et int fra brugeren for hans eller hendes alder. 948 00:42:01,371 --> 00:42:04,620 Men dette program er beregnet til at blive brugt af flere personer, uanset sammenhæng. 949 00:42:04,620 --> 00:42:05,490 Jeg har en linje af mennesker. 950 00:42:05,490 --> 00:42:08,281 Alle af dem er nødt til at skrive i deres alder for måske nogle, jeg ikke kender, 951 00:42:08,281 --> 00:42:10,530 konkurrence, eller begivenhed at de er ankommet til. 952 00:42:10,530 --> 00:42:13,030 Så den næste person, jeg brug for en anden variabel. 953 00:42:13,030 --> 00:42:15,790 >> Fordi hvis jeg bare gøre alder får getInt, det er 954 00:42:15,790 --> 00:42:18,500 vil tæske eller overskrive den foregående person alder. 955 00:42:18,500 --> 00:42:19,760 Så det er ikke godt. 956 00:42:19,760 --> 00:42:21,790 Så min første indskydelse måtte være, oh, okay, 957 00:42:21,790 --> 00:42:26,260 hvis jeg ønsker at få flere folks ages-- lad os kalde denne alder1, 958 00:42:26,260 --> 00:42:31,280 int Alder2 får int, int alder3 får getInt. 959 00:42:31,280 --> 00:42:35,340 Og nu jeg har tænkt mig at bruge nogle pseudokode kode her. 960 00:42:35,340 --> 00:42:37,679 >> Gør noget med disse numre. 961 00:42:37,679 --> 00:42:40,470 Vi vil overlade til en anden dag, hvad vi laver der, fordi vi kun 962 00:42:40,470 --> 00:42:44,200 omsorg for øjeblikket om alder1, Alder2, alder3. 963 00:42:44,200 --> 00:42:46,450 Desværre, når jeg kompilere dette program 964 00:42:46,450 --> 00:42:51,140 og sætte det foran faktiske brugere, hvad er det fundamentalt dårligt design 965 00:42:51,140 --> 00:42:53,890 beslutning, jeg synes at have gjort? 966 00:42:53,890 --> 00:42:54,624 Ja? 967 00:42:54,624 --> 00:42:55,499 Publikum: [uhørligt] 968 00:42:55,499 --> 00:42:58,071 969 00:42:58,071 --> 00:42:59,820 David J. MALAN: Ja, Jeg har ikke selv prøvet 970 00:42:59,820 --> 00:43:02,028 at regne ud hvor mange aldre har jeg faktisk ligeglad? 971 00:43:02,028 --> 00:43:05,380 Hvis jeg har færre end tre mennesker her, og derfor færre end tre aldersgrupper, 972 00:43:05,380 --> 00:43:07,260 Jeg er stadig blindt venter tre. 973 00:43:07,260 --> 00:43:08,720 Gud forbyde fire mennesker dukke op. 974 00:43:08,720 --> 00:43:10,990 Mit program vil bare ikke engang støtte dem. 975 00:43:10,990 --> 00:43:13,280 >> Og så dette, lang historie Kort sagt, er ikke en god vane. 976 00:43:13,280 --> 00:43:13,780 Right? 977 00:43:13,780 --> 00:43:16,530 Jeg var hovedsagelig at kopiere og indsætter kode og bare tweaking 978 00:43:16,530 --> 00:43:17,430 de variable navne. 979 00:43:17,430 --> 00:43:22,410 Og, min Gud, hvis du havde, ikke tre aldre, men 10 eller 100, eller endda 6.500 980 00:43:22,410 --> 00:43:23,820 bachelorer, for eksempel. 981 00:43:23,820 --> 00:43:26,950 Dette kommer ikke til at være særlig elegante kode, eller bæredygtigt. 982 00:43:26,950 --> 00:43:29,200 Du kommer til at have til omskrive programmet hver gang 983 00:43:29,200 --> 00:43:30,760 Deres antal mennesker ændringer. 984 00:43:30,760 --> 00:43:35,090 >> Så heldigvis, i vores faktiske ages.c fil til i dag, 985 00:43:35,090 --> 00:43:36,970 vi har en mere smart løsning. 986 00:43:36,970 --> 00:43:39,800 Først vil jeg låne konstruere vi har brugt et par gange, 987 00:43:39,800 --> 00:43:43,744 dette gøre, mens løkke, for at få antallet af personer i rummet. 988 00:43:43,744 --> 00:43:46,910 Jeg skal bare til at forpeste brugeren, igen og igen, indtil han eller hun giver mig 989 00:43:46,910 --> 00:43:49,260 en værdi af n, der er et positivt heltal. 990 00:43:49,260 --> 00:43:51,590 >> Jeg kunne have brugt, sidste tid komme positiv int. 991 00:43:51,590 --> 00:43:53,720 Men vi har ikke den for alvor, så jeg gik videre 992 00:43:53,720 --> 00:43:55,660 og re gennemført denne idé. 993 00:43:55,660 --> 00:43:58,410 Nu hernede, det er den nye trick. 994 00:43:58,410 --> 00:44:02,260 I linie 27, som kommentarerne i ledningen 26 antyder, 995 00:44:02,260 --> 00:44:05,180 erklære et array, hvor at lagre alle alder. 996 00:44:05,180 --> 00:44:09,320 >> Så hvis du ønsker at få, ikke en int, ikke to int'er, men en hel bunke af int'er. 997 00:44:09,320 --> 00:44:13,800 Konkret n heltal, var n måske være tre, kan være 100, kan være 1.000. 998 00:44:13,800 --> 00:44:17,570 Syntaksen, ganske enkelt er at sige, hvilken datatype vil du have? 999 00:44:17,570 --> 00:44:19,620 Hvad vil du kalde at bid af hukommelse? 1000 00:44:19,620 --> 00:44:23,530 Hvad ønsker du at ringe til nettet der ser sådan billedligt? 1001 00:44:23,530 --> 00:44:27,700 >> Og i parentes her, siger du hvor stor du ønsker array til at være. 1002 00:44:27,700 --> 00:44:30,450 Og så tidligere, da jeg sagde det syntaks er lidt anderledes her, 1003 00:44:30,450 --> 00:44:33,614 Vi bruger stadig firkantede parenteser, men når jeg erklære et array, 1004 00:44:33,614 --> 00:44:35,530 antallet indersiden af firkantede parenteser midler 1005 00:44:35,530 --> 00:44:37,610 hvor stor vil du array til at være. 1006 00:44:37,610 --> 00:44:42,490 >> Derimod når vi bruger s beslag jeg for et øjeblik siden, s, en snor, 1007 00:44:42,490 --> 00:44:46,820 er faktisk en vifte af tegn, men når du ikke erklære en variabel, 1008 00:44:46,820 --> 00:44:49,760 som med denne nøgleordet her, du blot at få 1009 00:44:49,760 --> 00:44:54,280 et specifikt indeks, en specifik Fra dette array. 1010 00:44:54,280 --> 00:44:57,090 Når vi ved, at resten af denne er ligetil. 1011 00:44:57,090 --> 00:45:00,765 Hvis der kommer nye jeg først kommer til at printe ud hvad er en alder af personnummeret jeg. 1012 00:45:00,765 --> 00:45:03,890 Hvor jeg bare sige person, nummer et, person, nummer to, person, nummer tre. 1013 00:45:03,890 --> 00:45:06,306 >> Og jeg er bare aritmetik så at ligesom normale mennesker, 1014 00:45:06,306 --> 00:45:09,030 vi tæller fra en til dette program, og ikke fra nul. 1015 00:45:09,030 --> 00:45:13,620 Så kalder jeg getint, men jeg gemme svaret i aldre beslag jeg. 1016 00:45:13,620 --> 00:45:16,610 Hvilken er den i'te alder i array. 1017 00:45:16,610 --> 00:45:21,640 Så mens sidste gang vi var at behandle disse kasser som tegn for Zamyla navn, 1018 00:45:21,640 --> 00:45:22,490 og andre. 1019 00:45:22,490 --> 00:45:26,530 Nu repræsenterer disse kasser 32 bit eller fire bytes 1020 00:45:26,530 --> 00:45:29,510 hvor vi kan gemme en int, en int, en int. 1021 00:45:29,510 --> 00:45:31,890 Alt, som igen er den samme datatype. 1022 00:45:31,890 --> 00:45:33,890 >> Nu gør jeg noget dumt, ligesom tiden går, bare 1023 00:45:33,890 --> 00:45:35,510 for at skrive dette program. 1024 00:45:35,510 --> 00:45:40,050 Og derefter ned her, jeg igen gentage løbet array sige et år fra nu, 1025 00:45:40,050 --> 00:45:43,090 personnummer man vil være noget år. 1026 00:45:43,090 --> 00:45:45,010 Og for at regne ud, at math-- Jeg mener, dette 1027 00:45:45,010 --> 00:45:49,260 ikke meget kompliceret arithmetic-- Jeg blot tilføje én til deres alder. 1028 00:45:49,260 --> 00:45:51,240 Bare for at bevise igen, dette. 1029 00:45:51,240 --> 00:45:57,910 >> Ligesom jeg kan indeksere ind i en streng, s, så kan jeg indekset i en bred vifte af aldre, 1030 00:45:57,910 --> 00:45:59,950 ligesom den der. 1031 00:45:59,950 --> 00:46:03,340 Så hvor er dette kommer til at tage os? 1032 00:46:03,340 --> 00:46:07,070 Så vil vi se, i sidste ende, en få ting i de kommende dage. 1033 00:46:07,070 --> 00:46:09,510 En, al denne tid, hvor skrive dine egne programmer, 1034 00:46:09,510 --> 00:46:11,239 Ligesom Mario, grådige, kredit. 1035 00:46:11,239 --> 00:46:13,780 Du har været at skrive navnet på programmet og trykke Enter. 1036 00:46:13,780 --> 00:46:15,610 Og derefter få brugerens input. 1037 00:46:15,610 --> 00:46:18,137 >> Med getString, getInt, getLongLong eller lignende. 1038 00:46:18,137 --> 00:46:20,720 Men det viser sig, at C understøtninger noget, der hedder kommandolinje 1039 00:46:20,720 --> 00:46:25,740 argumenter, der kommer til at lade os faktisk får på ord, som du skriver, 1040 00:46:25,740 --> 00:46:28,570 på den blinkende prompt, efter dit program navn. 1041 00:46:28,570 --> 00:46:31,430 >> Så i de kommende dage, du kan skrive noget som Cæsar, 1042 00:46:31,430 --> 00:46:34,950 eller ./caesar nummer 13, derefter. 1043 00:46:34,950 --> 00:46:36,070 Vi vil se, hvordan det virker. 1044 00:46:36,070 --> 00:46:37,550 Fordi ja, i Problemet indstille to, er vi 1045 00:46:37,550 --> 00:46:39,383 kommer til at introducere dig til lidt noget 1046 00:46:39,383 --> 00:46:42,360 minder om Ralphie s udfordre tidligere kartografi. 1047 00:46:42,360 --> 00:46:43,970 Kunsten scrambling oplysninger. 1048 00:46:43,970 --> 00:46:46,660 Dette, i virkeligheden er meget minder om hvad Ralphie gjorde. 1049 00:46:46,660 --> 00:46:51,380 >> Dette er et eksempel på en kryptering algoritme kaldet rot13, R-O-T-13. 1050 00:46:51,380 --> 00:46:54,910 Hvilket betyder blot dreje bogstaver i alfabetet 13 steder. 1051 00:46:54,910 --> 00:46:58,309 Og hvis du gør det, vil du se nu hvad er måske en velkendt sætning. 1052 00:46:58,309 --> 00:47:01,100 Men den måde, vi kommer til at bruge dette i sidste ende er mere generelt. 1053 00:47:01,100 --> 00:47:04,390 >> Med P indstille to, i standard udgave, vil du gennemføre et par kryptering, 1054 00:47:04,390 --> 00:47:06,720 ét kaldet Cæsar, en kaldet Vigenere. 1055 00:47:06,720 --> 00:47:10,090 Begge af dem er roterende kryptering, idet en eller anden måde du 1056 00:47:10,090 --> 00:47:11,826 vende et bogstav til et andet bogstav. 1057 00:47:11,826 --> 00:47:12,950 Og Cæsar er super enkel. 1058 00:47:12,950 --> 00:47:16,220 Du tilføjer en, du tilføjer 13, eller en række op til 26. 1059 00:47:16,220 --> 00:47:19,570 Vigenere gør det på en per brev basis. 1060 00:47:19,570 --> 00:47:22,140 Så Vigenere, som du kan se i spec, er mere sikker. 1061 00:47:22,140 --> 00:47:24,973 >> Men i slutningen af ​​dagen, hvad du vil være at gennemføre og P indstille to, 1062 00:47:24,973 --> 00:47:29,050 er, at nøglen, som du bruger både til kryptering og dekryptering. 1063 00:47:29,050 --> 00:47:32,160 Under henvisning til processen med at gøre almindelig tekst, nogle oprindelige meddelelse, 1064 00:47:32,160 --> 00:47:34,490 i batch tekst, som er noget krypteret. 1065 00:47:34,490 --> 00:47:36,220 Og så dekryptere den igen. 1066 00:47:36,220 --> 00:47:38,119 >> I hacker udgave, i mellemtiden, vil du blive 1067 00:47:38,119 --> 00:47:40,660 opgave med noget lignende i ånden, hvor vi vil give dig 1068 00:47:40,660 --> 00:47:44,610 en fil fra en typisk Linux eller Mac eller Unix computer kaldet Etsy 1069 00:47:44,610 --> 00:47:47,800 password, som indeholder et helt bundt af brugernavne og passwords. 1070 00:47:47,800 --> 00:47:50,932 Og de adgangskoder har alle blevet krypteret eller hashet, 1071 00:47:50,932 --> 00:47:53,140 så at sige, mere korrekt som du kan se i spec. 1072 00:47:53,140 --> 00:47:57,090 >> Og hacker udgave vil udfordre dig med at tage en indgang som denne, 1073 00:47:57,090 --> 00:47:58,800 og revner adgangskoden. 1074 00:47:58,800 --> 00:48:02,590 Det vil sige, at finde ud af, hvad menneskets kodeord faktisk var. 1075 00:48:02,590 --> 00:48:05,570 Fordi, ja, adgangskoder er generelt ikke er lagret i den klare, 1076 00:48:05,570 --> 00:48:08,260 og generelt adgangskoder bør være svært at gætte. 1077 00:48:08,260 --> 00:48:09,610 Det er ikke ofte er tilfældet. 1078 00:48:09,610 --> 00:48:12,110 >> Og hvad jeg troede, vi ville gøre, er slutte med et par minutter 1079 00:48:12,110 --> 00:48:15,160 blik på et særligt dårligt valg af adgangskoder 1080 00:48:15,160 --> 00:48:17,260 fra en film, du måske husker lyserødt. 1081 00:48:17,260 --> 00:48:18,915 Og hvis ikke, bør du leje. 1082 00:48:18,915 --> 00:48:20,070 >> [VIDEOAFSPILNING] 1083 00:48:20,070 --> 00:48:22,320 >> -Helmet, Du djævel, hvad sker der? 1084 00:48:22,320 --> 00:48:24,240 Hvad laver du med min datter? 1085 00:48:24,240 --> 00:48:28,010 >> -Permit Mig at introducere strålende ung plastikkirurg, 1086 00:48:28,010 --> 00:48:30,010 Læge Phillip Schlotkin. 1087 00:48:30,010 --> 00:48:35,020 Den største næse job mand i hele universet og Beverly Hills. 1088 00:48:35,020 --> 00:48:36,140 >> -Din Højhed. 1089 00:48:36,140 --> 00:48:36,820 >> -Nose Job? 1090 00:48:36,820 --> 00:48:37,700 Jeg forstår det ikke. 1091 00:48:37,700 --> 00:48:39,070 Hun har allerede haft en næse job. 1092 00:48:39,070 --> 00:48:40,800 Det var hendes søde 16 til stede. 1093 00:48:40,800 --> 00:48:42,590 >> Nej, det er ikke hvad du tror. 1094 00:48:42,590 --> 00:48:44,490 Det er meget, meget værre. 1095 00:48:44,490 --> 00:48:48,160 Hvis du ikke giver mig den kombinationen til luft skjold, 1096 00:48:48,160 --> 00:48:52,748 læge Schlotkin vil give din datter tilbage hendes gamle næse. 1097 00:48:52,748 --> 00:48:53,748 - [Gisp] Nooooooooooooo. 1098 00:48:53,748 --> 00:48:57,684 1099 00:48:57,684 --> 00:48:59,652 Hvor fik du den? 1100 00:48:59,652 --> 00:49:00,640 >> -Okay. 1101 00:49:00,640 --> 00:49:02,506 Jeg vil fortælle, jeg vil fortælle. 1102 00:49:02,506 --> 00:49:03,498 >> Nej, far, nej. 1103 00:49:03,498 --> 00:49:04,490 Du må ikke. 1104 00:49:04,490 --> 00:49:06,090 >> -Du Højre min kære. 1105 00:49:06,090 --> 00:49:07,390 Jeg vil savne din nye næse. 1106 00:49:07,390 --> 00:49:10,990 Men jeg vil ikke fortælle dem kombination uanset hvad. 1107 00:49:10,990 --> 00:49:12,450 >> -meget Godt. 1108 00:49:12,450 --> 00:49:14,830 Læge Schlotkin, gør dit værste. 1109 00:49:14,830 --> 00:49:15,744 >> -Min Fornøjelse. 1110 00:49:15,744 --> 00:49:19,860 1111 00:49:19,860 --> 00:49:20,800 >> Nej! 1112 00:49:20,800 --> 00:49:22,780 Vent, vent. 1113 00:49:22,780 --> 00:49:24,000 Jeg vil fortælle. 1114 00:49:24,000 --> 00:49:25,830 Jeg vil fortælle. 1115 00:49:25,830 --> 00:49:28,270 >> Jeg vidste, at det ville fungere. 1116 00:49:28,270 --> 00:49:31,390 Okay, giv mig det. 1117 00:49:31,390 --> 00:49:36,220 >> -Den Kombination er en. 1118 00:49:36,220 --> 00:49:36,740 >> -One. 1119 00:49:36,740 --> 00:49:37,473 >> -One. 1120 00:49:37,473 --> 00:49:37,972 -To. 1121 00:49:37,972 --> 00:49:38,471 -To. 1122 00:49:38,471 --> 00:49:39,800 -To. 1123 00:49:39,800 --> 00:49:40,300 -Tre. 1124 00:49:40,300 --> 00:49:40,800 -Tre. 1125 00:49:40,800 --> 00:49:41,800 -Tre. 1126 00:49:41,800 --> 00:49:42,300 -Fire. 1127 00:49:42,300 --> 00:49:42,800 -Fire. 1128 00:49:42,800 --> 00:49:44,707 -Fire. 1129 00:49:44,707 --> 00:49:45,521 -Fem. 1130 00:49:45,521 --> 00:49:46,430 -Fem. 1131 00:49:46,430 --> 00:49:47,930 -Fem. 1132 00:49:47,930 --> 00:49:53,480 -Så Kombinationen er én, to, tre, fire, fem. 1133 00:49:53,480 --> 00:49:56,140 Det er den dummeste kombination Jeg nogensinde hører i mit liv. 1134 00:49:56,140 --> 00:49:58,640 Det er den slags ting en idiot ville have på sin bagage. 1135 00:49:58,640 --> 00:50:00,000 >> Mange tak, Deres Højhed. 1136 00:50:00,000 --> 00:50:01,340 >> [REMOTE CLICKS] 1137 00:50:01,340 --> 00:50:02,450 >> Hvad sagde du? 1138 00:50:02,450 --> 00:50:03,800 >> Jeg slukkede for væggen. 1139 00:50:03,800 --> 00:50:05,010 >> Nej, det gjorde du ikke, du slukket hele filmen. 1140 00:50:05,010 --> 00:50:06,220 >> Jeg må have trykket på den forkerte knap. 1141 00:50:06,220 --> 00:50:07,064 >> Tja, sætte det på igen! 1142 00:50:07,064 --> 00:50:07,910 Sæt filmen tilbage på! 1143 00:50:07,910 --> 00:50:08,300 >> Ja, sir! 1144 00:50:08,300 --> 00:50:08,799 Ja, sir. 1145 00:50:08,799 --> 00:50:09,660 Lad os gå, Arnold. 1146 00:50:09,660 --> 00:50:10,450 Kom, Gretchen. 1147 00:50:10,450 --> 00:50:12,533 Selvfølgelig du ved, jeg vil nødt til at fakturere dig for dette. 1148 00:50:12,533 --> 00:50:16,720 1149 00:50:16,720 --> 00:50:17,220 Tja? 1150 00:50:17,220 --> 00:50:17,802 Virkede det? 1151 00:50:17,802 --> 00:50:18,510 Hvor er Kongen? 1152 00:50:18,510 --> 00:50:20,218 >> -Det Arbejdede, sir, vi har kombinationen. 1153 00:50:20,218 --> 00:50:20,740 -Great. 1154 00:50:20,740 --> 00:50:24,810 Nu kan vi tage hver sidste åndedrag af frisk luft fra planet Druidia. 1155 00:50:24,810 --> 00:50:25,890 Hvad er kombinationen? 1156 00:50:25,890 --> 00:50:28,155 >> -En, To, tre, fire, fem. 1157 00:50:28,155 --> 00:50:29,890 >> -En, To, tre, fire, fem? 1158 00:50:29,890 --> 00:50:30,390 Ja. 1159 00:50:30,390 --> 00:50:31,110 -Det Er forbløffende. 1160 00:50:31,110 --> 00:50:34,550 Jeg har fået den samme kombination på min bagage. 1161 00:50:34,550 --> 00:50:37,160 Forbered Spaceball 1 for øjeblikkelig afgang. 1162 00:50:37,160 --> 00:50:38,160 >> Ja, sir. 1163 00:50:38,160 --> 00:50:40,745 >> -Og Ændre kombination på min bagage. 1164 00:50:40,745 --> 00:50:41,578 [Dørlukning SOUND] 1165 00:50:41,578 --> 00:50:42,064 [CLINK DØRE SLÅET HELMET] 1166 00:50:42,064 --> 00:50:42,550 -Ahh. 1167 00:50:42,550 --> 00:50:43,383 [END VIDEO PLAYBACK] 1168 00:50:43,383 --> 00:50:46,700 David J. MALAN: Det er det for CS50, vil vi se dig i næste uge. 1169 00:50:46,700 --> 00:50:49,883 Fortæller: Og nu, Deep Tanker, ved Daven Farnham. 1170 00:50:49,883 --> 00:50:53,160 1171 00:50:53,160 --> 00:50:55,860 >> Daven FARNHAM: kodning i C er så meget sværere end Scratch. 1172 00:50:55,860 --> 00:50:57,320 printf, Scratch var en løgn. 1173 00:50:57,320 --> 00:50:59,930 1174 00:50:59,930 --> 00:51:01,430 >> [Latter soundbite] 1175 00:51:01,430 --> 00:51:02,486