1 00:00:00,000 --> 00:00:05,140 2 00:00:05,140 --> 00:00:05,640 Greit. 3 00:00:05,640 --> 00:00:08,330 Så nå la oss snakke om noe veldig nyttig i programming-- 4 00:00:08,330 --> 00:00:09,914 betinget utsagn. 5 00:00:09,914 --> 00:00:11,830 Så betingelsesuttrykk tillate programmene dine 6 00:00:11,830 --> 00:00:14,538 til å ta avgjørelser og ta annerledes gafler i veien, noe 7 00:00:14,538 --> 00:00:17,670 Jeg antydet litt tidligere, avhengig av verdiene av variablene 8 00:00:17,670 --> 00:00:20,990 eller basert på hva de bruker innganger på programmerer, på kommandolinjen, 9 00:00:20,990 --> 00:00:23,130 eller hvis du har en ledetekst eller noe sånt. 10 00:00:23,130 --> 00:00:26,690 C har et par forskjellige måter å uttrykke betingede uttrykk, som 11 00:00:26,690 --> 00:00:29,911 vi også noen ganger vil kalle en betinget gren i programmene dine. 12 00:00:29,911 --> 00:00:32,910 Og noen av disse kommer til å se ganske kjent for deg fra bunnen av, 13 00:00:32,910 --> 00:00:35,190 så vi vil også trekke dem opp side ved side, bare 14 00:00:35,190 --> 00:00:38,170 du kan gjøre som analogi i hodet ditt. 15 00:00:38,170 --> 00:00:41,250 >> Så, hvis er if-- en ganske enkel betinget. 16 00:00:41,250 --> 00:00:43,560 Hvis du husker fra ripe på høyre her 17 00:00:43,560 --> 00:00:50,000 du kan fylle i at det er sekskant med en blå uttrykk hvis musen ned 18 00:00:50,000 --> 00:00:53,010 eller hvis x er mindre enn 10, eller noe sånt. 19 00:00:53,010 --> 00:00:57,390 Og deretter, hvis x var mindre enn 10, eller hvis musen var faktisk ned 20 00:00:57,390 --> 00:01:01,140 all koden innside puslespill brikke ville utføre. 21 00:01:01,140 --> 00:01:03,720 Alle de tingene som passer innsiden som C form. 22 00:01:03,720 --> 00:01:07,200 >> Tilsvarende har vi hvis på venstre der. 23 00:01:07,200 --> 00:01:09,210 Hvis boolsk uttrykk, som jeg bare bruker 24 00:01:09,210 --> 00:01:13,010 som en erstatning for en av de boolske uttrykk vi tidligere diskutert, 25 00:01:13,010 --> 00:01:15,240 åpen klammeparentes, tett krøllete brace. 26 00:01:15,240 --> 00:01:17,720 Så tenk på åpen krøllete seler og lukket klammeparentes 27 00:01:17,720 --> 00:01:22,720 som en slags analog til sandwich Virkningen av om blokken til høyre 28 00:01:22,720 --> 00:01:24,070 fra bunnen av. 29 00:01:24,070 --> 00:01:28,680 >> Hvis den boolske uttrykk i hvis setningen er sann, 30 00:01:28,680 --> 00:01:30,900 deretter alle linjer med kode mellom klammeparentes 31 00:01:30,900 --> 00:01:33,870 vil utføre for fra topp til bunn. 32 00:01:33,870 --> 00:01:35,700 Hvis den boolske uttrykk er falsk, vil vi 33 00:01:35,700 --> 00:01:38,610 hoppe over alt i mellom klammeparentes, fordi vi bare 34 00:01:38,610 --> 00:01:44,570 ønsker å gå ned som veiskille hvis boolsk uttrykk er sant. 35 00:01:44,570 --> 00:01:48,540 >> Vi kan ta dette ett skritt videre med hvis annet. 36 00:01:48,540 --> 00:01:50,820 Så dette Scratch blokken er ganske lik den 37 00:01:50,820 --> 00:01:55,884 vi så bare et sekund siden, bortsett det tar to forskjellige baner basert 38 00:01:55,884 --> 00:01:56,550 på hva som skjer. 39 00:01:56,550 --> 00:02:00,420 Så hvis musa var nede, eller hvis x var mindre enn 10, 40 00:02:00,420 --> 00:02:04,780 vi vil gjøre alt som er i mellom at første gaffel, som først C., 41 00:02:04,780 --> 00:02:08,430 >> Ellers, hvis musa er opp, eller x er ikke mindre enn 10, 42 00:02:08,430 --> 00:02:10,460 vi vil gjøre alt i det andre settet. 43 00:02:10,460 --> 00:02:15,010 Og det er analogt til det du ser her for C. Hvis boolsk uttrykk, 44 00:02:15,010 --> 00:02:17,910 gjøre ting mellom første sett med klammeparentes. 45 00:02:17,910 --> 00:02:20,550 Else, gjør ting mellom andre sett av klammeparentes. 46 00:02:20,550 --> 00:02:22,080 Så hvis boolsk uttrykket er sant, vi vil 47 00:02:22,080 --> 00:02:23,580 gjøre hva er mellom det første settet. 48 00:02:23,580 --> 00:02:27,480 Hvis boolsk uttrykk er falsk, som ville utløse annet, 49 00:02:27,480 --> 00:02:30,100 og vi vil gjøre hva som står i det andre settet med klammeparentes. 50 00:02:30,100 --> 00:02:34,190 Igjen, topp til bunn, alt linjer i mellom tannregulering. 51 00:02:34,190 --> 00:02:38,130 >> I C, er det mulig å opprette en if-else if-else-kjeden. 52 00:02:38,130 --> 00:02:42,000 Faktisk kan du ha if-else if-else if-else, dersom, og så videre og så videre og så 53 00:02:42,000 --> 00:02:42,720 på. 54 00:02:42,720 --> 00:02:44,660 I Scratch, dette kreves hekkende blokkene. 55 00:02:44,660 --> 00:02:48,280 Du legger til en if-else, og du måtte sette en annen en innsiden av annet, 56 00:02:48,280 --> 00:02:51,110 og så videre, og det fikk slag nestede og komplisert. 57 00:02:51,110 --> 00:02:52,450 Men C, har vi ikke til å gjøre det. 58 00:02:52,450 --> 00:02:55,300 Vi kan faktisk bare ha det være en kjede som dette. 59 00:02:55,300 --> 00:02:58,350 Igjen, som du kanskje forventer, alle disse grenene er gjensidig utelukkende. 60 00:02:58,350 --> 00:03:00,750 Du kan alltid bare gå ned en av grenen. 61 00:03:00,750 --> 00:03:02,270 Hvis dette er sant. 62 00:03:02,270 --> 00:03:03,930 Ellers, hvis dette er sant. 63 00:03:03,930 --> 00:03:05,700 Ellers, hvis dette er sant. 64 00:03:05,700 --> 00:03:07,120 Ellers gjør dette. 65 00:03:07,120 --> 00:03:11,010 Så alle fire av grenene i dette eksempel er gjensidig utelukkende. 66 00:03:11,010 --> 00:03:14,900 Det er en if-else if-else-kjeden. 67 00:03:14,900 --> 00:03:17,580 >> Det er mulig selv om, og noen ganger svært nyttig, 68 00:03:17,580 --> 00:03:20,950 for å lage en kjede av ikke gjensidig utelukkende grener. 69 00:03:20,950 --> 00:03:24,600 I dette eksempel er det bare den tredje og fjerde grenene er gjensidig utelukkende. 70 00:03:24,600 --> 00:03:27,450 Det kan være at du kan tilfredsstiller den første betingelse, 71 00:03:27,450 --> 00:03:29,396 og du kan tilfredsstille det andre vilkåret, 72 00:03:29,396 --> 00:03:31,770 og du kan tilfredsstille tredje condition-- i hvilket tilfelle 73 00:03:31,770 --> 00:03:35,270 du vil gå ned den første grenen, så du gå ned en annen gren, 74 00:03:35,270 --> 00:03:37,000 så du vil gå ned i tredje grenen. 75 00:03:37,000 --> 00:03:40,450 Eller kanskje du tilfredsstille den første tilstand, og det andre vilkåret, 76 00:03:40,450 --> 00:03:42,770 men du trenger ikke tilfreds det tredje vilkåret. 77 00:03:42,770 --> 00:03:46,230 I dette tilfellet går du ned den første gren og den andre grenen, 78 00:03:46,230 --> 00:03:48,040 og deretter den fjerde gren, 79 00:03:48,040 --> 00:03:51,392 >> Grunnen til dette er at det annet vil bare bindes til nærmeste hvis. 80 00:03:51,392 --> 00:03:53,100 Så selv om det er et annet sted her, at 81 00:03:53,100 --> 00:03:56,490 ikke nødvendigvis skape en gjensidig eksklusive kjede av alt. 82 00:03:56,490 --> 00:04:00,890 Det er bare uttrykket der med boolsk 83 00:04:00,890 --> 00:04:05,040 uttrykk 3-- det er gjensidig utelukkende med andre. 84 00:04:05,040 --> 00:04:07,580 Så det er mulig, og noen ganger ganske nyttig, 85 00:04:07,580 --> 00:04:11,772 som jeg sa, for å lage en kjede av ikke gjensidig utelukkende grener. 86 00:04:11,772 --> 00:04:14,230 La oss ta en titt på en annen slags betinget, noe som 87 00:04:14,230 --> 00:04:17,392 du ikke har sett før i Scratch. 88 00:04:17,392 --> 00:04:19,369 Det er noe som heter bryteren uttalelse. 89 00:04:19,369 --> 00:04:21,410 Den bryter uttalelse er litt artig fordi det er 90 00:04:21,410 --> 00:04:25,930 en betinget utsagn som gjør at du angi forskjellige tilfeller, 91 00:04:25,930 --> 00:04:28,926 i stedet for å stole på boolsk uttrykk for å ta avgjørelser for deg. 92 00:04:28,926 --> 00:04:31,050 Så for eksempel, la oss si at jeg har dette programmet, 93 00:04:31,050 --> 00:04:34,110 og jeg spør brukeren å gi innspill til meg. 94 00:04:34,110 --> 00:04:37,170 Så jeg sier, int x = Få Int () og hvis du ikke er kjent ennå, 95 00:04:37,170 --> 00:04:40,190 får int er en funksjon som er også inkludert i CS50 biblioteket 96 00:04:40,190 --> 00:04:44,610 så hvis du #include CS50.H du vil ha tilgang til Get Int () og alle dens 97 00:04:44,610 --> 00:04:46,840 cousins-- GetFloat, GetString, og så videre. 98 00:04:46,840 --> 00:04:52,590 I utgangspunktet én Få funksjon for hver datatype som vi allerede har diskutert. 99 00:04:52,590 --> 00:04:53,970 >> Så Int x lik GetInt. 100 00:04:53,970 --> 00:04:56,390 I utgangspunktet hva som skjer er jeg på terminalen. 101 00:04:56,390 --> 00:04:58,790 Jeg ber brukeren om å taste inn et nummer. 102 00:04:58,790 --> 00:05:02,300 >> Og her Jeg bytter hva jeg gjør, avhengig 103 00:05:02,300 --> 00:05:05,060 på hva brukeren skrev ved ledeteksten. 104 00:05:05,060 --> 00:05:09,147 Så hvis de skrev en, jeg skrive ut en. 105 00:05:09,147 --> 00:05:09,855 Og da jeg bryte. 106 00:05:09,855 --> 00:05:12,590 107 00:05:12,590 --> 00:05:15,510 Hvis de skriver to, jeg skrive ut to. 108 00:05:15,510 --> 00:05:16,690 Og da jeg bryte. 109 00:05:16,690 --> 00:05:19,060 Det er viktig å pause mellom hvert tilfelle 110 00:05:19,060 --> 00:05:20,890 fordi ellers vil du falle gjennom. 111 00:05:20,890 --> 00:05:23,380 Så hvis jeg ikke har noen pauser der, og brukeren 112 00:05:23,380 --> 00:05:31,380 skrevet en, hva som ville skje er det ville skrive ut én, to, tre, beklager. 113 00:05:31,380 --> 00:05:33,099 Det er slags merkelig oppførsel, ikke sant? 114 00:05:33,099 --> 00:05:33,890 Du tenker kanskje det. 115 00:05:33,890 --> 00:05:36,480 Men det er faktisk noen tilfeller der dette kan være en ganske nyttig ting. 116 00:05:36,480 --> 00:05:39,730 Så her er et annet eksempel på en bryter uttalelse hvor jeg utelate pausene. 117 00:05:39,730 --> 00:05:42,030 Men jeg gjør det med vilje. 118 00:05:42,030 --> 00:05:43,030 >> Så hva skjer her? 119 00:05:43,030 --> 00:05:43,821 Tenk for et sekund. 120 00:05:43,821 --> 00:05:45,960 Du kan selv ønsker å stanse videoen. 121 00:05:45,960 --> 00:05:48,230 >> Hva skjer her hvis brukeren taster fire? 122 00:05:48,230 --> 00:05:51,190 123 00:05:51,190 --> 00:05:53,860 Så jeg har spurt brukeren om innspill. 124 00:05:53,860 --> 00:05:56,560 Og de gir verdien fire. 125 00:05:56,560 --> 00:05:59,545 Hva blir skrevet ut når jeg gjør det? 126 00:05:59,545 --> 00:06:02,170 På forrige lysbilde, var det pauser mellom alle sakene. 127 00:06:02,170 --> 00:06:04,750 Og så ville det bare skrive ut fire og så stoppe. 128 00:06:04,750 --> 00:06:06,610 Men i dette tilfellet, vil det ikke. 129 00:06:06,610 --> 00:06:10,700 Hva som vil skje er at du vil falle gjennom hvert enkelt tilfelle. 130 00:06:10,700 --> 00:06:14,890 >> Så i dette tilfellet har jeg organisert min tilfeller på en slik måte at dersom brukeren taster 4, 131 00:06:14,890 --> 00:06:20,070 Jeg vil skrive ut fire, tre, to, en, drar av gårde. 132 00:06:20,070 --> 00:06:22,780 Og hvis de har skrevet fem, ville jeg begynne på fem og gjøre det samme. 133 00:06:22,780 --> 00:06:26,410 Hvis de har skrevet en, ville jeg gjøre bare én, blast off. 134 00:06:26,410 --> 00:06:28,715 >> Så i dette tilfellet, jeg bruker en bryter slags snedig så 135 00:06:28,715 --> 00:06:30,804 at jeg har tenkt å falle gjennom alle tilfeller. 136 00:06:30,804 --> 00:06:33,720 Men generelt er du sannsynligvis kommer til ønsker å bryte mellom dem alle, 137 00:06:33,720 --> 00:06:36,090 med mindre du har en situasjon som dette hvor du er 138 00:06:36,090 --> 00:06:40,081 slags utnytte det faktum at du vil faller gjennom sakene uten pause. 139 00:06:40,081 --> 00:06:42,830 Så det er den andre av de store typer betinget utsagn. 140 00:06:42,830 --> 00:06:47,139 Den siste av disse er:? Så jeg har to utdrag av C-kode her. 141 00:06:47,139 --> 00:06:48,680 En på venstre og en på høyre. 142 00:06:48,680 --> 00:06:52,330 Den til venstre skal trolig være ganske kjent for deg. 143 00:06:52,330 --> 00:06:55,110 >> Jeg har Int x. 144 00:06:55,110 --> 00:06:57,167 Og jeg sannsynligvis burde har bedt brukeren 145 00:06:57,167 --> 00:07:00,250 for-- dette bør trolig være Int x lik GetInt, eller noe sånt. 146 00:07:00,250 --> 00:07:03,030 147 00:07:03,030 --> 00:07:05,240 Og så skal jeg ta en avgjørelse. 148 00:07:05,240 --> 00:07:11,700 Hvis noen boolsk uttrykk er sant, tilordne x verdien 5. 149 00:07:11,700 --> 00:07:13,590 Ellers tildele x verdien seks. 150 00:07:13,590 --> 00:07:16,548 >> Som på venstre burde være ganske kjent fra vår diskusjon 151 00:07:16,548 --> 00:07:18,160 If Else bare et øyeblikk siden. 152 00:07:18,160 --> 00:07:20,535 Vil du bli overrasket over å vite at linjen på høyre 153 00:07:20,535 --> 00:07:22,310 gjør akkurat det samme? 154 00:07:22,310 --> 00:07:26,140 >> Så dette kalles? Eller noen ganger kalt trefoldig operatør. 155 00:07:26,140 --> 00:07:27,450 Og det er ganske kult. 156 00:07:27,450 --> 00:07:29,110 Det er vanligvis brukt som en søt trick. 157 00:07:29,110 --> 00:07:35,777 >> Men hva det tillater deg å gjøre er å simulere en If Else med veldig liten, 158 00:07:35,777 --> 00:07:37,610 virkelig trivielt kort betingede grener. 159 00:07:37,610 --> 00:07:41,470 Du vanligvis ikke ville bruke:? Hvis du hadde seks linjer med kode mellom hvert sett 160 00:07:41,470 --> 00:07:42,569 av klammeparentes. 161 00:07:42,569 --> 00:07:44,360 Men hvis du er bare gjøre en rask avgjørelse, 162 00:07:44,360 --> 00:07:47,520 Hvis du kommer til å gjøre en ting eller den andre, og det er veldig enkelt, 163 00:07:47,520 --> 00:07:52,240 dette kan være et eksempel på hvordan man gjøre det med? trefoldig operatør. 164 00:07:52,240 --> 00:07:56,940 Så Int x lik uttrykk? 165 00:07:56,940 --> 00:07:59,470 Ting etter spørsmålet mark er hva x verdi 166 00:07:59,470 --> 00:08:02,690 vil bli hvis uttrykket er sant. 167 00:08:02,690 --> 00:08:05,330 >> Saken etter kolon er hva x verdi 168 00:08:05,330 --> 00:08:07,990 ville være hvis den var uttrykket falsk. 169 00:08:07,990 --> 00:08:11,510 Så jeg spør meg selv, er uttrykket sant? 170 00:08:11,510 --> 00:08:13,870 Hvis det er, tilordne x verdien 5. 171 00:08:13,870 --> 00:08:16,619 Hvis det ikke er det, tilordne x verdien seks. 172 00:08:16,619 --> 00:08:17,410 Igjen, som jeg sa. 173 00:08:17,410 --> 00:08:18,670 Dette er vanligvis bare en søt trick. 174 00:08:18,670 --> 00:08:20,430 Og noen ganger hvis du blir veldig komfortabel med det, 175 00:08:20,430 --> 00:08:22,820 du vil gjøre dette fordi det ser ut litt kult i programmene dine. 176 00:08:22,820 --> 00:08:25,710 Vanligvis jeg presenterer det til du nå så du er kjent med det 177 00:08:25,710 --> 00:08:26,990 hvis du ser det. 178 00:08:26,990 --> 00:08:30,080 Men sikkert vet at du ikke trenger å skrive det på noen av koden din. 179 00:08:30,080 --> 00:08:33,246 Men det er noe å bli kjent med, fordi du vil definitivt møte 180 00:08:33,246 --> 00:08:36,130 kodebiter her og der hvor dette:? syntaks, 181 00:08:36,130 --> 00:08:39,120 AKA trefoldig operatøren, blir brukt. 182 00:08:39,120 --> 00:08:40,960 >> Så rask oppsummering på hva conditionals er, 183 00:08:40,960 --> 00:08:44,210 og hva alternativene er tilgjengelige til deg i C. Du har If og if-else, 184 00:08:44,210 --> 00:08:46,860 og hvis annet hvis, et cetera. 185 00:08:46,860 --> 00:08:50,880 Du kan bruke boolske uttrykk for dem å ta beslutninger. 186 00:08:50,880 --> 00:08:53,720 >> Med bryteren uttalelser bruker du diskrete tilfeller å ta beslutninger. 187 00:08:53,720 --> 00:08:57,540 Du vil spesielt si, hvis det er en, eller om det er to, eller om det er tre, 188 00:08:57,540 --> 00:09:00,870 Jeg skal gjøre dette, eller denne tingen, eller denne tingen. 189 00:09:00,870 --> 00:09:04,660 Og: kan brukes til å erstatte svært enkle if-else grener, 190 00:09:04,660 --> 00:09:08,490 eller hvis-annet kjedene å gjøre koden din ser litt fancy. 191 00:09:08,490 --> 00:09:09,250 >> Jeg er Doug Lloyd. 192 00:09:09,250 --> 00:09:11,410 Og dette er CS50. 193 00:09:11,410 --> 00:09:12,959