Okej. Så nu ska vi prata om någonting verkligen användbart i programming-- villkorssatser. Så villkorsuttryck låta dina program att fatta beslut och ta olika gafflar i vägen, något Jag hänvisade till lite tidigare, beroende på värdena på variabler, eller baserat på vad användaren matar på programmeraren, på kommandoraden, eller om du har en fråga eller något sådant. C har ett par olika sätt att uttrycka villkorsuttryck, som vi också ibland kallar en villkor filial i dina program. Och några av dessa kommer att se ut ganska bekant för dig från scratch, så vi kommer även dra dem upp sida vid sida, precis du kan göra det analogi i huvudet. Så, om är if-- en ganska enkel villkorligt. Om ni minns från repa på höger här du kan fylla i det är hexagon med en blå uttryck om musen ner eller om X är mindre än 10, eller något sådant. Och sedan, om x var mindre än 10, eller om musen var i själva verket, nedåt, all kod insidan av pusselbiten skulle utföra. Alla de saker som passar insidan som C-form. På samma sätt har vi om till vänster där. Om booleskt uttryck, som jag bara använda som ett substitut för en av Boolean uttryck vi tidigare diskuterat, öppna klammerparentes, nära klammerparentes. Så tänk på öppen lockigt stag och sluten klammerparentes som en slags analogt med sandwich effekten av om blocket på höger från början. Om det booleska uttryck i om påståendet är sant, då alla kodrader mellan klammerparenteserna kommer att utföra i syfte från topp till tå. Om det booleska uttryck är falska, vi ska hoppa över allt däremellan klammerparenteserna, eftersom vi bara vill gå den vägskäl Om det booleska uttrycket är sant. Vi kan ta detta ett steg ytterligare med om annat. Så här Scratch block är ganska lik den vi såg bara en sekund sedan, med undantag det tar två olika vägar baserade om vad som händer. Så om musen var nere, eller om x var mindre än 10, Vi kommer att göra allt som är i mellan det första gaffeln, det första C, Annars, om musen är upp, eller x är minst 10, Vi kommer att göra allt i andra set. Och det är analogt med vad du ser här för C. Om booleskt uttryck, göra saker mellan första uppsättning klammerparenteser. Annars gör grejer mellan andra uppsättning av klammerparenteser. Så om Boolean uttrycket är sant, vi ska göra vad är mellan den första uppsättningen. Om det booleska uttrycket är falsk, skulle det utlösa annat, och vi skulle göra vad är i den andra uppsättningen av klammerparenteser. Återigen, topp till botten, alla linjer i mellan hängslen. I C, är det möjligt att skapa en if-else if-else kedjan. I själva verket kan du ha if-else if-else if-else, om och så vidare och så vidare och så vidare. I Scratch, detta krävs kapsla blocken. Du lägger en if-else, och var du tvungen att sätta en annan insidan av annat, och så vidare, och det fick typ av kapslade och komplicerat. Men C, behöver vi inte göra det. Vi kan faktiskt bara ha det är en kedja som denna. Återigen, som du kanske tror, ​​alla dessa grenar är ömsesidigt uteslutande. Du kan alltid bara gå ner en av grenen. Om detta är sant. Annars, om detta är sant. Annars, om detta är sant. Annars gör detta. Så alla fyra grenarna i detta exempel är ömsesidigt uteslutande. Det är en if-else if-else kedjan. Det är möjligt men, och ibland mycket användbar, att skapa en kedja av inte ömsesidigt uteslutande grenar. I detta exempel, bara den tredje och fjärde grenar är ömsesidigt uteslutande. Det kan vara så att du kan uppfyller det första villkoret, och du kan tillfredsställa det andra villkoret, och du kan tillfredsställa tredje Skick- i vilket fall du skulle gå ner den första grenen, sedan går du ner en andra gren, då du skulle gå ner den tredje grenen. Eller kanske du uppfyller det första skick, och det andra villkoret, men du inte uppfyller det tredje villkoret. I det här fallet du går ner den första gren och den andra grenen, och sedan den fjärde grenen, Anledningen till detta är att den annars kommer endast att binda till närmaste om. Så även om det finns en annan här, att inte nödvändigtvis skapar en ömsesidigt exklusiva kedja av allt. Det är bara ett uttryck där med Boolean uttryck 3-- det är ömsesidigt uteslutande med annat. Så det är möjligt, och ibland ganska användbara, som jag sa, att skapa en kedja av inte utesluter varandra grenar. Låt oss ta en titt på en annan typ av villkorad, som du inte har sett förut i Scratch. Det finns något som kallas satsen switch. Satsen switch är typ av snyggt eftersom det är en villkorlig programsats som tillåter du ange tydliga mål, i stället för att förlita sig på Boolean uttryck för att fatta beslut för dig. Så till exempel, låt oss säga att jag har det här programmet, och jag ber användaren att bidra till mig. Så jag säger, int x = Få Int (), och om du inte är bekant ännu, få int är en funktion som är även i CS50 biblioteket så om du #include CS50.H har du tillgång att få Int () och alla dess cousins-- getFloat, GetString, och så vidare. I grund och botten en Få funktion för varje datatyp som vi redan har diskuterat. Så Int x är lika getInt. I grund och botten vad som händer är jag på terminalen. Jag ber användaren att skriva in ett nummer. Och här jag byta vad jag gör, beroende på vad användaren skrivit vid prompten. Så om de skrev en, jag skriva ut en. Och sedan jag bryta. Om de skriver två, jag skriva ut två. Och sedan jag bryta. Det är viktigt att bryta mellan varje fall annars kommer du att falla igenom. Så om jag inte hade någon raster där, och användaren maskinskriven en, vad som skulle hända är det skulle skriva ut en, två, tre, sorry. Det är typ av märkliga beteende, eller hur? Du kanske tror det. Men det finns faktiskt vissa fall där Detta kan vara en ganska bra sak. Så här är ett annat exempel på en switch uttalande där jag utelämna raster. Men jag gör det med flit. Så vad händer här? Tänk för en sekund. Du kanske även vill pausa videon. Vad händer här om användaren skriver fyra? Så jag har bett användaren för inmatning. Och de ger värdet 4. Vad får ut när jag gör det? På föregående bild, fanns pauser mellan samtliga fall. Och så skulle det bara ut fyra och sedan stanna. Men i detta fall, kommer det inte. Vad kommer att hända är att du kommer att falla genom varje fall. Så i det här fallet jag har organiserat mitt fall på ett sådant sätt att, om användaren skriver 4, Jag kommer att skriva ut fyra, tre, två, ett, spränga bort. Och om de skrivit fem, skulle jag börja på fem och göra samma sak. Om de skrev en, skulle jag bara göra en, blast off. Så i detta fall, jag använder en omkopplare slags skickligt så att jag tänker att falla genom alla fallen. Men generellt är du förmodligen gonna vill bryta mellan dem alla, om du inte har en situation som den här där du typ av utnyttja det faktum att du kommer falla igenom fallen utan avbrott. Så det är den andra av de stora typer av villkorssatser. Varav den sista är:? Så jag har två fragment av C-kod här. En på vänster och en på höger sida. Den till vänster bör förmodligen vara ganska bekant för dig. Jag har Int x. Och jag förmodligen borde har bett användaren for-- detta bör nog vara Int x lika getInt, eller nåt sånt. Och då jag fattar ett beslut. Om några booleskt uttryck är sant, tilldela x värdet 5. Annars tilldela x värdet 6. Det till vänster bör nog vara ganska bekant från vår diskussion If Else bara en stund sedan. Skulle du bli förvånad över att veta att linjen på höger gör exakt samma sak? Så det här kallas:? Eller ibland kallas ternära operatören. Och det är ganska coolt. Det är oftast används som en söt trick. Men vad det gör att du kan göra är att simulera en Om Else med riktigt små, verkligen trivialt kort villkorliga grenar. Du vanligtvis inte skulle använda:? Om du hade sex rader kod mellan varje uppsättning av klammerparenteserna. Men om du bara gör ett snabbt beslut, Om du ska göra en sak eller andra och det är mycket enkelt, detta kan vara ett exempel på hur man göra det med? ternära operatören. Så Int x är lika med uttrycket? Saken efter frågan märket är vad x värde kommer att vara om uttrycket är sant. Saken efter kolon är vad xs värde skulle vara om expressionen var falsk. Så jag frågar mig själv, är ett uttryck sant? Om det är, tilldela x värdet 5. Om det inte tilldela x värdet 6. Återigen, som jag sa. Detta är oftast bara en söt trick. Och ibland om du blir riktigt bekväm med det, Du ska göra detta eftersom det ser ut typ av cool i dina program. Generellt jag presenterar det till du nu så du är bekant med det om du ser det. Men säkert vet att du inte har att skriva det i någon av din kod. Men det är något att vara bekant med, eftersom du kommer definitivt att stöta kodavsnitt här och Det var så här:? syntax, AKA ternära operatören används. Så snabb sammanfattning på vilka villkors är och vilka alternativ är tillgängliga till dig i C. Du har If och if-else, och om annat om et cetera. Du kan använda booleska uttryck för dem att fatta beslut. Med switch uttalanden du använder diskreta fall att fatta beslut. Du skulle specifikt säga, om det är en, eller om det är två, eller om det är tre, Jag ska göra det här, eller denna sak, eller det här. Och: kan användas för att ersätta mycket enkla if-else grenar, eller om-else kedjor att göra koden ser lite fantasi. Jag är Doug Lloyd. Och detta är CS50.