1 00:00:00,000 --> 00:00:05,140 2 00:00:05,140 --> 00:00:05,640 Okay. 3 00:00:05,640 --> 00:00:08,330 Så lad os nu tale om noget virkelig nyttige i programming-- 4 00:00:08,330 --> 00:00:09,914 betingede udsagn. 5 00:00:09,914 --> 00:00:11,830 Så betingede udtryk give dine programmer 6 00:00:11,830 --> 00:00:14,538 til at træffe beslutninger og tage forskellige gafler i vejen, noget 7 00:00:14,538 --> 00:00:17,670 Jeg hentydede til lidt tidligere, afhængigt af værdierne af variabler, 8 00:00:17,670 --> 00:00:20,990 eller baseret på, hvad brugeren input på programmøren, på kommandolinjen, 9 00:00:20,990 --> 00:00:23,130 eller hvis du har en prompt eller sådan noget. 10 00:00:23,130 --> 00:00:26,690 C har et par forskellige måder at udtrykke betingede udtryk, som 11 00:00:26,690 --> 00:00:29,911 vi også nogle gange vil kalde en betinget filial i dine programmer. 12 00:00:29,911 --> 00:00:32,910 Og nogle af disse kommer til at se temmelig velkendt for dig fra bunden, 13 00:00:32,910 --> 00:00:35,190 så vi vil endda trække dem op side om side, lige 14 00:00:35,190 --> 00:00:38,170 du kan gøre, at analogi i dit hoved. 15 00:00:38,170 --> 00:00:41,250 >> Så if-- hvis er en smuk simpel betinget. 16 00:00:41,250 --> 00:00:43,560 Hvis du husker fra ridse på højre her 17 00:00:43,560 --> 00:00:50,000 man kunne udfylde det er sekskant med en blå udtryk, hvis musen nede 18 00:00:50,000 --> 00:00:53,010 eller hvis x er mindre end 10, eller sådan noget. 19 00:00:53,010 --> 00:00:57,390 Og derefter, hvis x er mindre end 10, eller hvis musen var faktisk ned, 20 00:00:57,390 --> 00:01:01,140 hele koden indersiden af brik ville udføre. 21 00:01:01,140 --> 00:01:03,720 Alle de ting, der passer inde, at C form. 22 00:01:03,720 --> 00:01:07,200 >> Ligeledes har vi hvis venstre der. 23 00:01:07,200 --> 00:01:09,210 Hvis Boolesk udtryk, som jeg bare bruger 24 00:01:09,210 --> 00:01:13,010 som en erstatning for en af ​​de booleske udtryk vi tidligere diskuteret, 25 00:01:13,010 --> 00:01:15,240 åben krøllet klammeparentes tæt krøllet parentes. 26 00:01:15,240 --> 00:01:17,720 Så tænk på åben krøllet klampe og lukkede krøllet tandbøjle 27 00:01:17,720 --> 00:01:22,720 som en slags analog med sandwich virkning af IF blok på højre 28 00:01:22,720 --> 00:01:24,070 fra begyndelsen. 29 00:01:24,070 --> 00:01:28,680 >> Hvis Boolsk udtryk i hvis udsagn er sandt, 30 00:01:28,680 --> 00:01:30,900 så alle linjer kode mellem de krøllede parenteser 31 00:01:30,900 --> 00:01:33,870 vil udføre for fra top til bund. 32 00:01:33,870 --> 00:01:35,700 Hvis Boolsk udtryk er falsk, vi får 33 00:01:35,700 --> 00:01:38,610 springe over alt i mellem de krøllede parenteser, fordi kun vi 34 00:01:38,610 --> 00:01:44,570 ønsker at gå ned at gaffel i vejen hvis den booleske udtryk er sandt. 35 00:01:44,570 --> 00:01:48,540 >> Vi kan tage det et skridt yderligere med hvis andet. 36 00:01:48,540 --> 00:01:50,820 Så denne Scratch blok er temmelig ligner den 37 00:01:50,820 --> 00:01:55,884 vi så bare et sekund siden, bortset fra det tager to forskellige veje baseret 38 00:01:55,884 --> 00:01:56,550 på hvad der sker. 39 00:01:56,550 --> 00:02:00,420 Så hvis musen var nede, eller hvis x er mindre end 10, 40 00:02:00,420 --> 00:02:04,780 vi vil gøre alt, hvad der er i mellem den første gaffel, der først C., 41 00:02:04,780 --> 00:02:08,430 >> Ellers, hvis musen er op eller x ikke er mindre end 10, 42 00:02:08,430 --> 00:02:10,460 Vi vil gøre alt i det andet sæt. 43 00:02:10,460 --> 00:02:15,010 Og det er analogt med, hvad du ser her for C. Hvis boolesk udtryk, 44 00:02:15,010 --> 00:02:17,910 gøre de ting mellem første sæt krøllede parenteser. 45 00:02:17,910 --> 00:02:20,550 Else, gør de ting mellem andet sæt krøllede parenteser. 46 00:02:20,550 --> 00:02:22,080 Så hvis den booleske udtryk er sandt, vi får 47 00:02:22,080 --> 00:02:23,580 gøre, hvad der er mellem det første sæt. 48 00:02:23,580 --> 00:02:27,480 Hvis den booleske udtryk er falsk, vil der udløser andet, 49 00:02:27,480 --> 00:02:30,100 og vi vil gøre, hvad er i det andet sæt af krøllede parenteser. 50 00:02:30,100 --> 00:02:34,190 Igen, top til bund, alle linjer i mellem seler. 51 00:02:34,190 --> 00:02:38,130 >> I C, er det muligt at skabe en if-else if-else kæde. 52 00:02:38,130 --> 00:02:42,000 Faktisk kan du have if-else if-else if-else, hvis 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 krævede indlejring blokkene. 55 00:02:44,660 --> 00:02:48,280 Du tilføjer en if-else, og du var nødt til at sætte en anden inde i andet, 56 00:02:48,280 --> 00:02:51,110 og så videre, og det fik slags af indlejret og kompliceret. 57 00:02:51,110 --> 00:02:52,450 Men C, behøver vi ikke at gøre det. 58 00:02:52,450 --> 00:02:55,300 Vi kan faktisk bare have det være en kæde som denne. 59 00:02:55,300 --> 00:02:58,350 Igen, som man kunne forvente, alle disse filialer udelukker hinanden. 60 00:02:58,350 --> 00:03:00,750 Du kan kun nogensinde gå ned ad en af ​​filialen. 61 00:03:00,750 --> 00:03:02,270 Hvis dette er sandt. 62 00:03:02,270 --> 00:03:03,930 Ellers, hvis dette er sandt. 63 00:03:03,930 --> 00:03:05,700 Ellers, hvis dette er sandt. 64 00:03:05,700 --> 00:03:07,120 Ellers gøre dette. 65 00:03:07,120 --> 00:03:11,010 Så alle fire af grenene i dette eksempel udelukker hinanden. 66 00:03:11,010 --> 00:03:14,900 Det er en if-else if-else kæde. 67 00:03:14,900 --> 00:03:17,580 >> Det er dog muligt, og til tider meget nyttigt, 68 00:03:17,580 --> 00:03:20,950 at skabe en kæde af ikke gensidigt udelukkende filialer. 69 00:03:20,950 --> 00:03:24,600 I dette eksempel kun den tredje og fjerde grene udelukker hinanden. 70 00:03:24,600 --> 00:03:27,450 Det kunne være, at du kunne opfylde den første betingelse, 71 00:03:27,450 --> 00:03:29,396 og du kunne tilfredsstille den anden betingelse, 72 00:03:29,396 --> 00:03:31,770 og du kunne tilfredsstille tredje Stand- i hvilket tilfælde 73 00:03:31,770 --> 00:03:35,270 ville du gå ned den første gren, så du går ned ad en anden gren, 74 00:03:35,270 --> 00:03:37,000 så ville du gå ned den tredje gren. 75 00:03:37,000 --> 00:03:40,450 Eller måske du opfylder den første tilstand, og den anden tilstand, 76 00:03:40,450 --> 00:03:42,770 men du ikke opfylder den tredje betingelse. 77 00:03:42,770 --> 00:03:46,230 I dette tilfælde skal du gå ned den første filial og den anden gren, 78 00:03:46,230 --> 00:03:48,040 og derefter den fjerde gren, 79 00:03:48,040 --> 00:03:51,392 >> Grunden til dette er, at andre vil kun binde til den nærmeste hvis. 80 00:03:51,392 --> 00:03:53,100 Så selv om der er en andet her, at 81 00:03:53,100 --> 00:03:56,490 skaber ikke nødvendigvis en gensidigt eksklusiv kæde af alt. 82 00:03:56,490 --> 00:04:00,890 Det er kun et udtryk der med Boolesk 83 00:04:00,890 --> 00:04:05,040 udtryk 3-- det er den gensidigt udelukkende med andet. 84 00:04:05,040 --> 00:04:07,580 Så det er muligt, og undertiden ganske nyttigt, 85 00:04:07,580 --> 00:04:11,772 som jeg sagde, for at skabe en kæde af ikke gensidigt udelukkende grene. 86 00:04:11,772 --> 00:04:14,230 Lad os tage et kig på en anden form for betinget, som 87 00:04:14,230 --> 00:04:17,392 du ikke har set før i Scratch. 88 00:04:17,392 --> 00:04:19,369 Der er noget, der hedder switch-statementet. 89 00:04:19,369 --> 00:04:21,410 Kontakten erklæring er slags neat fordi det er 90 00:04:21,410 --> 00:04:25,930 en betinget erklæring, der tillader du angive forskellige sager, 91 00:04:25,930 --> 00:04:28,926 i stedet for at stole på Boolesk udtryk til at træffe beslutninger for dig. 92 00:04:28,926 --> 00:04:31,050 Altså for eksempel, lad os sige at jeg har dette program, 93 00:04:31,050 --> 00:04:34,110 og jeg beder brugeren at give input til mig. 94 00:04:34,110 --> 00:04:37,170 Så jeg siger, int x = Get Int (), og hvis du ikke kender endnu, 95 00:04:37,170 --> 00:04:40,190 få int er en funktion, der er også inkluderet i CS50 bibliotek, 96 00:04:40,190 --> 00:04:44,610 så hvis du # include CS50.H har du adgang 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 Dybest set en få funktionen for hver datatype, som vi allerede har diskuteret. 99 00:04:52,590 --> 00:04:53,970 >> Så Int x lig GetInt. 100 00:04:53,970 --> 00:04:56,390 Dybest set, hvad der sker er jeg på terminalen. 101 00:04:56,390 --> 00:04:58,790 Jeg beder brugeren om at indtaste et nummer. 102 00:04:58,790 --> 00:05:02,300 >> Og her jeg skifter hvad jeg gør, afhængigt 103 00:05:02,300 --> 00:05:05,060 om hvad brugeren har skrevet ved prompten. 104 00:05:05,060 --> 00:05:09,147 Så hvis de har skrevet en, jeg udskrive en. 105 00:05:09,147 --> 00:05:09,855 Og så er jeg bryder. 106 00:05:09,855 --> 00:05:12,590 107 00:05:12,590 --> 00:05:15,510 Hvis de skriver to, jeg udskrive to. 108 00:05:15,510 --> 00:05:16,690 Og så er jeg bryder. 109 00:05:16,690 --> 00:05:19,060 Det er vigtigt at pause mellem hvert tilfælde 110 00:05:19,060 --> 00:05:20,890 fordi ellers vil du falde igennem. 111 00:05:20,890 --> 00:05:23,380 Så hvis jeg ikke havde nogen pauser der, og brugeren 112 00:05:23,380 --> 00:05:31,380 maskinskrevet én, hvad der ville ske, er det ville udskrive en, to, tre, undskyld. 113 00:05:31,380 --> 00:05:33,099 Det er lidt underligt, ikke? 114 00:05:33,099 --> 00:05:33,890 Du tror måske det. 115 00:05:33,890 --> 00:05:36,480 Men der er faktisk nogle tilfælde, hvor dette kunne være en temmelig nyttig ting. 116 00:05:36,480 --> 00:05:39,730 Så her er et andet eksempel på en switch erklæring, hvor jeg udelade pauser. 117 00:05:39,730 --> 00:05:42,030 Men jeg gør det med vilje. 118 00:05:42,030 --> 00:05:43,030 >> Så hvad sker der her? 119 00:05:43,030 --> 00:05:43,821 Tænke et sekund. 120 00:05:43,821 --> 00:05:45,960 Du kan selv ønsker at holde pause i videoen. 121 00:05:45,960 --> 00:05:48,230 >> Hvad sker der her, hvis brugeren typer fire? 122 00:05:48,230 --> 00:05:51,190 123 00:05:51,190 --> 00:05:53,860 Så jeg har bedt brugeren om input. 124 00:05:53,860 --> 00:05:56,560 Og de giver værdien 4. 125 00:05:56,560 --> 00:05:59,545 Hvad bliver trykt, når jeg gør det? 126 00:05:59,545 --> 00:06:02,170 På den forrige dias, var der pauser mellem alle tilfælde. 127 00:06:02,170 --> 00:06:04,750 Og så ville det bare udskrive fire og derefter stoppe. 128 00:06:04,750 --> 00:06:06,610 Men i dette tilfælde, vil det ikke. 129 00:06:06,610 --> 00:06:10,700 Hvad vil der ske, er du vil falde igennem hvert enkelt tilfælde. 130 00:06:10,700 --> 00:06:14,890 >> Så i dette tilfælde har jeg organiseret mine sager på en sådan måde, at hvis brugeren indtaster 4, 131 00:06:14,890 --> 00:06:20,070 Jeg vil udskrive fire, tre, to, en, blast off. 132 00:06:20,070 --> 00:06:22,780 Og hvis de har skrevet 5, ville jeg begynde på fem og gøre det samme. 133 00:06:22,780 --> 00:06:26,410 Hvis de har skrevet 1, ville jeg bare gøre en, blast off. 134 00:06:26,410 --> 00:06:28,715 >> Så i dette tilfælde, jeg bruger en omskifter slags ødelagde så 135 00:06:28,715 --> 00:06:30,804 at jeg har til hensigt at falde gennem alle sager. 136 00:06:30,804 --> 00:06:33,720 Men generelt er du sandsynligvis vil vil bryde mellem dem alle, 137 00:06:33,720 --> 00:06:36,090 medmindre du har en situation, som denne, hvor du er 138 00:06:36,090 --> 00:06:40,081 slags udnytte det faktum, at du får falder gennem sagerne uden pause. 139 00:06:40,081 --> 00:06:42,830 Så det er den anden af ​​de store typer af betingede udsagn. 140 00:06:42,830 --> 00:06:47,139 Hvoraf den sidste er:? Så jeg har to uddrag af C-kode her. 141 00:06:47,139 --> 00:06:48,680 En til venstre og en til højre. 142 00:06:48,680 --> 00:06:52,330 Den ene til venstre bør sandsynligvis være temmelig velkendt for dig. 143 00:06:52,330 --> 00:06:55,110 >> Jeg har Int x. 144 00:06:55,110 --> 00:06:57,167 Og jeg nok skulle har bedt brugeren 145 00:06:57,167 --> 00:07:00,250 for-- dette bør nok være Int x lig GetInt, eller noget lignende. 146 00:07:00,250 --> 00:07:03,030 147 00:07:03,030 --> 00:07:05,240 Og så er jeg træffer en beslutning. 148 00:07:05,240 --> 00:07:11,700 Hvis nogle Boolsk udtryk er sandt, tildele x værdien 5. 149 00:07:11,700 --> 00:07:13,590 Ellers tildele x værdien 6. 150 00:07:13,590 --> 00:07:16,548 >> Det til venstre bør nok være temmelig velkendt fra vores diskussion 151 00:07:16,548 --> 00:07:18,160 af Hvis Else bare et øjeblik siden. 152 00:07:18,160 --> 00:07:20,535 Ville du blive overrasket over at vide, at på højre 153 00:07:20,535 --> 00:07:22,310 gør præcis de samme ting? 154 00:07:22,310 --> 00:07:26,140 >> Så dette kaldes:? Eller nogle gange kaldes ternære operatør. 155 00:07:26,140 --> 00:07:27,450 Og det er ret cool. 156 00:07:27,450 --> 00:07:29,110 Det er normalt bruges som en sød trick. 157 00:07:29,110 --> 00:07:35,777 >> Men hvad det giver dig mulighed for at gøre, er at simulere en Hvis Else med virkelig små, 158 00:07:35,777 --> 00:07:37,610 virkelig trivielt kort betingede grene. 159 00:07:37,610 --> 00:07:41,470 Du ville normalt ikke bruge:? Hvis du havde seks linjer kode mellem hvert sæt 160 00:07:41,470 --> 00:07:42,569 af krøllede parenteser. 161 00:07:42,569 --> 00:07:44,360 Men hvis du bare at gøre en hurtig beslutning, 162 00:07:44,360 --> 00:07:47,520 Hvis du kommer til at gøre én ting eller det andet, og det er meget simpelt, 163 00:07:47,520 --> 00:07:52,240 dette kunne være et eksempel på, hvordan man gøre det med:? den ternære operatør. 164 00:07:52,240 --> 00:07:56,940 Så Int x lig udtryk? 165 00:07:56,940 --> 00:07:59,470 De ting efter spørgsmålet mark er, hvad x værdi 166 00:07:59,470 --> 00:08:02,690 vil være, hvis udtryk er sandt. 167 00:08:02,690 --> 00:08:05,330 >> De ting efter kolon er hvad X'er værdi 168 00:08:05,330 --> 00:08:07,990 ville være, hvis ekspression var forkerte. 169 00:08:07,990 --> 00:08:11,510 Så jeg spørger mig selv, er udtryk sandt? 170 00:08:11,510 --> 00:08:13,870 Hvis det er, tildele x værdien 5. 171 00:08:13,870 --> 00:08:16,619 Hvis det ikke er, tildele x værdien 6. 172 00:08:16,619 --> 00:08:17,410 Igen, ligesom jeg sagde. 173 00:08:17,410 --> 00:08:18,670 Dette er normalt bare en sød trick. 174 00:08:18,670 --> 00:08:20,430 Og nogle gange, hvis du bliver virkelig komfortabel med det, 175 00:08:20,430 --> 00:08:22,820 du vil gøre dette, fordi det ser slags cool i dine programmer. 176 00:08:22,820 --> 00:08:25,710 Generelt jeg præsentere det til du nu, så du er fortrolig 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 helt sikkert ved, du ikke har at skrive det i nogen af ​​din kode. 179 00:08:30,080 --> 00:08:33,246 Men det er noget at være bekendt med, fordi du vil helt sikkert støde 180 00:08:33,246 --> 00:08:36,130 uddrag af koden her og der, hvor det:? syntaks, 181 00:08:36,130 --> 00:08:39,120 AKA det ternære operatør, anvendes. 182 00:08:39,120 --> 00:08:40,960 >> Så hurtig oversigt på hvilke betingede er, 183 00:08:40,960 --> 00:08:44,210 og hvad mulighederne er tilgængelige til dig i C. Du er nødt Hvis og hvis-andet, 184 00:08:44,210 --> 00:08:46,860 og hvis ellers hvis, et cetera. 185 00:08:46,860 --> 00:08:50,880 Du kan bruge booleske udtryk for dem at træffe beslutninger. 186 00:08:50,880 --> 00:08:53,720 >> Med switch udsagn, du bruger diskrete tilfælde at træffe beslutninger. 187 00:08:53,720 --> 00:08:57,540 Du ville specifikt sige, hvis det er én, eller hvis det er to, eller hvis det er tre, 188 00:08:57,540 --> 00:09:00,870 Jeg vil gøre denne ting, eller denne ting, eller denne ting. 189 00:09:00,870 --> 00:09:04,660 Og:? Kan skal anvendes til at erstatte meget enkle if-else grene, 190 00:09:04,660 --> 00:09:08,490 eller if-else kæder til at din kode ser lidt fancy. 191 00:09:08,490 --> 00:09:09,250 >> Jeg er Doug Lloyd. 192 00:09:09,250 --> 00:09:11,410 Og det er CS50. 193 00:09:11,410 --> 00:09:12,959