Hallo en welkom.
Ik wil graag een demonstratie geven oplossing voor
onze vorige uitdaging die de implementatie was: een gok- en cijferspel.
Dus laten we code ter sprake brengen blokken,
sluit mijn huidige project en maak een nieuwe aan.
Dit nieuwe project ik ga gewoon om het goknummerspel te bellen.
Het wordt een console applicatie.
Dus ik ga gewoon noem het raad het nummer.
En wat ik ga doen in dit om dit project te starten, ik ga
mijn variabelen declareren.
Ik vind het altijd leuk om te declareren en het zijn mijn variabelen bovenaan.
Maar ik ga ook gebruiken de generator voor willekeurige getallen.
Dus ik wil er zeker van zijn dat Ik heb een paar omvat.
Stdlib is er standaard al.
Dus ik hoef alleen maar mijn . toe te voegen tijd. h omdat dit weer voor een generator van
willekeurige getallen is.
Dit is in principe voor de willekeurig nummer generator stoel.
De andere variabelen die ik ben dat ik in dit programma nodig heb, is
dat ik mijn willekeurige getallen wil opslaan.
Dus ik ga gewoon zeggen willekeurig getal, ik ga dat initialiseren tot 0
totdat I haal het uit de eigenlijke bibliotheek.
Dus verklaren initialiseren.
Ik ga een variabele maken om sla de gok van de gebruiker op, en
ik ga dat initialiseren met 0.
Ik ga nog een variabele maken wat het aantal
gissingen zal zijn, het huidige aantal gissingen of eigenlijk
moet ik zeggen maximum aantal gissingen, maximum aantal gissingen, en ik ga dit initialiseren tot 5
omdat ze kunnen maar 5 keer raden.
Ik moet ook een tijd aanmaken variabele zodat ik het kan gebruiken voor mijn
generator voor willekeurige getallen.
Dus ik ga gewoon zeggen tijd t t.
Het eerste wat ik wil doen voordat ik vraag de gebruiker om input, ik
wil het willekeurige getal genereren.
Ik denk dat ik dit zou kunnen doen na te hebben gevraagd de gebruiker voor invoer, maar het is eenvoudig
om het eerste te doen wat u doet.
Dus ik ga mijn . initialiseren willekeurige nummergenerator, ik ga daar
een kleine opmerking plaatsen.
Zorg ervoor dat je goed zinvol gebruikt namen en zorg ervoor dat u inspringt.
Het gaat die srand-functie gebruiken waar ik het in de lezing over had.
Je kunt het gewoon doorgeven in wezen in een zaadje.
Dus ik ga zeggen niet ondertekend, en ik ben ga gewoon doorgeven in mijn t-variabele.
Dit gaat tijd krijgen is een functie die de huidige tijd krijgt.
Ik ga de t doorgeven zodat het zaai het en dan ga ik het beëindigen.
Nu moet ik eigenlijk mijn willekeurige nummergenerator, dus ik ga zeggen:
haal het willekeurige nummer.
En dit gaat allemaal gebeuren is een variabele toewijzen aan wat
wordt geretourneerd door de randfunctie.
Dus laten we zeggen een willekeurig getal dat is mijn lokale
variabele gelijk aan en gebruik de toewijzingsoperator say rand die een functie aanroept.
Je hoeft hier niets van te weten, maar ik ga het zaaien met 21.
Dit zorgt ervoor dat mijn willekeurige getal ligt alleen tussen 0 en 20.
Nu ga ik gewoon een . uitvoeren koppel berichten aan het scherm zodat de
gebruiker weet wat hij doet.
Dus ik ga een print-app doen en ik ben zal zeggen dat dit een raadspel is.
En dan ga ik ook vertel ze dat ik
weer een getal tussen 0 en 20 heb gekozen, zodat ze op de hoogte zijn.
En dan 0 en 20 die je moet raden en eindigen met de line feed.
Nu ik ze vertelde wat ik wil in het spel, ga ik echt
beginnen met loopen.
En ik ga door tot mijn aantal gissingen is gelijk aan 5.
Dus wat zou ik eigenlijk liever hebben doen is ik wilde mijn aantal
gissingen hier wissen, maar Ik wil niet initialiseren.
Ik wil initialiseren in mijn lus gewoon om te laten zien dat ik dat kan.
Als ik het daar initialiseerde, voor de eerste puntkomma in de for-lus, zou ik het
leeg kunnen houden.
Dus ik zou bijvoorbeeld iets kunnen doen zoals dit, initialiseer het hier.
En dan in mijn for-lus, zou ik zet gewoon een puntkomma omdat ik
geen initialisatie hoef te doen.
Want onthoud, in onze for-lus, het eerste dat
je hebt voor de puntkomma is de initialisatie van de regelvariabele van de lus.
Ik heb het al geïnitialiseerd dus ik hoef het niet
te doen, maar dat wil ik niet.
Ik ga het gewoon aankondigen het hier, en ik ga
het hier beneden initialiseren.
Ik ga zeggen maximaal aantal gissingen is gelijk aan 5.
Dat is mijn regelvariabele voor de lus, Ik ga het initialiseren.
Ik ga uit de springen loop als mijn maximale aantal
gissingen is bereikt.
Dus hier zou ik zeggen dat ik eigenlijk ben ga het op een andere manier schrijven.
Ik ga het zo schrijven de lus gaat van 5 naar 0.
Dus mijn maximale aantal is gelijk aan 5.
Het zou beter zijn om hernoem deze variabele.
Laten we het hernoemen en zeg aantal gissingen.
En het aantal gissingen gaat beginnen als 5.
En ik ga maken dit gaat achteruit.
En wanneer het aantal gissingen is 0, ik wil uit de lus springen.
Dus mijn lusuitgangsconditie, Ik ga zeggen dat het aantal gissingen groter
is dan 0.
Bekijk hier wat ik doe.
Ik ga alleen maar uit de springen loop als ik geen gissingen meer heb.
Dus als ik groter ben dan 0, ben ik binnen de kring blijven.
En dan het laatste wat ik wil voer de for-lus in nadat de
tweede klimaatdubbelpunt is gewijzigd van die regelvariabele van de lus.
Dus ik ga gewoon een minus minus het aantal gissingen.
En wat moet je opmerken in deze for-loop is
dat ik begin... Ik ga bijna achteruit.
Ik begin bij 5 en ik ga naar 0.
Voor alle voorbeelden die we in de lezing, we beginnen bij 0 en we gaan omhoog.
Maar je kunt beide doen, het maakt niet uit.
Je herhaalt hier nog steeds 5 keer.
Nu wil ik een . weergeven bericht dat hen
vertelt hoeveel pogingen ze nog hebben.
Dus ik ga zeggen printf, en eigenlijk ga ik de ternaire operator opnemen
hier omdat we het niet hebben gebruikt.
Het is niet nodig om het op deze manier te doen, maar ik ga het op
deze manier doen om je te laten zien hoe je kan de ternaire operator gebruiken.
Dus hier ga ik je uitprinten hebben procent d probeert procent s over.
Percentage d wordt gelijk aantal gissingen en tr procent
s, het gaat veranderen.
Het wordt ofwel proberen of het wordt proberen.
En dus ga ik veranderen wat er wordt weergegeven op basis van het
aantal gissingen dat ik nog heb.
Als het aantal gissingen is gelijk aan 1.
Ik wil geen pogingen plannen, één proberen blijft over, dat heeft geen zin.
Ik wil één poging afdrukken.
Dus hier ga ik de . gebruiken termitaire operator of meer
precies de voorwaardelijke operator.
Ik ga zeggen als het aantal gissingen gelijk aan 1, stel dan het aantal gissingen in dat gelijk is aan
y, stel het anders in op IES.
En ik ga het afdrukken dat is wat de procent s doet, wat
hier ook wordt geretourneerd.
Dus dit komt terug ofwel een IES en de juiste informatie
weergeven.
Dus ik deed dat gewoon om te zijn een beetje fantasie
laat je zien hoe je de terminal kunt gebruiken, print de juiste informatie uit.
Nadat ik het nummer heb uitgeprint aantal pogingen het laatst, dan wil ik ze vertellen dat
ze een gok moeten invoeren.
Dus ik ga ermee aan de
slag wat informatie en zeg gewoon printf voer gewoon een gok in en dit heeft een linefeed.
Dus voer een gok, en dan ga ik om die gok in te lezen met scanf, weten we hoe we moeten lezen
vanaf het toetsenbord.
Het wordt een geheel getal, dus ik ben ga procent d doen en ik
ga het in de gokvariabele plaatsen.
Dus ik moet de ampersand gebruiken.
Nu moet ik mijn controle doen.
Ik moet controleren of ik vermoed dat Ik ben waar ik me zorgen over maak.
Dus hier hebben we een andere uitgangssituatie.
Ik ga een if-statement gebruiken.
Ik ga zeggen als mijn gok is gelijk aan mijn willekeurig getal, wat wil
ik doen?
Nou, eerst wil ik printen uit en vertel hen dat
ze goed geraden zijn.
Dus ik ga uitprinten, gefeliciteerd, je raadt het al.
Wat wil ik nog meer doen? als ze goed raden?
Ik wil de lus verlaten.
Dus hoe kan ik de lus verlaten?
Ik zou pauze kunnen zetten.
Ik zou een pauze kunnen nemen, dat zal uit mijn lus springen.
Als het niet gelijk was, dus Ik wil nog een if toevoegen.
Als het niet gelijk is, wil ik controleren om zorg ervoor dat ze het nummer hebben gevalideerd.
Dus voordat ik zei dat je dat had kunnen doen een geneste lus voor validatie zodat
ze opnieuw binnenkomen, jij hoeft dat niet te doen, je kunt
gewoon een f-statement hebben.
Dus hier wil ik het nummer valideren.
Als het niet gelijk is aan de willekeurig getal,
ik wil zeker weten dat het tussen 0 en 20 ligt.
Dus als de gok kleiner is dan 0 of we
gebruiken een logische operator of 2 parallelle staven of de gok is groter dan 20, wat
in feite controleert op een ongeldige schatting.
Als dat het geval is en ik niet ik ga een haakje gebruiken omdat
ik maar één verklaring heb hier zijn haakjes optioneel als je maar
één statement hebt.
Dus als ze een ongeldige schatting hebben ingevoerd, alles wat ik ga doen is printf.
Ik ga uitprinten zei ik het getal ligt tussen 0 en 20.
En wat hier zal gebeuren is niets.
Het gaat gewoon printen dat eruit en
het gaat naar de volgende iteratie.
Het gaat hen vertellen hoe veel pogingen hebben ze nog over en
het wordt een gok.
Als je nu geen geldige wilt getallen als ze geldige getallen
hebben ingevoerd, tellen niet mee als gok, dan kun je een geneste lus hebben.
Maar als ze ergens binnenkomen 25, het telt nog steeds als een gok.
Dus ik zeg gewoon dat ik een getal tussen 0 en 20.
Als ze een geldig nummer hebben ingevoerd maar het was niet correct, dat
zou de else-clausule zijn.
Hier, ik ga gewoon zeggen, sorry, verkeerd nummer, en ik ga ze vertellen
of het zo is groter dan of lager dan.
En ik zou de ternaire kunnen gebruiken operator hier, maar dat ga ik niet doen.
Dus laten we hier ook een if toevoegen.
Anders als willekeurig groter is dan raad eens, wat wil ik dan afdrukken?
Ik wil uitprinten sorry procent d is verkeerd, procent d zal hun gok zijn.
Mijn getal is procent s is het eerste woord.
Als de willekeur groter is, mijn aantal is groter.
Mijn aantal is groter dan dat, en ik
gebruik geen percentielen en ik heb gewoon een line feed.
Anders als het willekeurige nummer is minder dan raden, dan wil ik ze vertellen dat het lager
is.
Dus ik kan de kopie doen en hetzelfde plakken.
Ik zou sorry kunnen zeggen, het nummer klopt niet, mijn nummer is minder dan dat.
En nogmaals, je zou eigenlijk kunnen zet deze 2 andere ifs.
Je zou er nog een kunnen hebben
als en je zou hier eigenlijk een voorwaardelijke verklaring kunnen afleggen.
Je zou de ternaire operator kunnen hebben, maar ik ga 2 else ifs gebruiken en zeggen dat het
minder is dan dat.
En dat zal het dan zijn, dat gaat de lus beëindigen.
En als we buiten de cirkel komen en we hebben niet goed geraden en
we hebben ons aantal pogingen overschreden, dan ga ik ze gewoon vertellen dat ze
5 pogingen hebben gehad en ze Ik heb het nummer niet geraden en ik ga
ze het nummer vertellen.
Dus een laatste output aan de gebruiker om te vertellen hen dat ze het spel niet hebben gewonnen en vertel
hen wat het nummer was.
Dus je hebt 5 pogingen gehad en faalde, het nummer was een willekeurig nummer.
Oké, dus dat is logisch?
We doen hier veel dingen.
We gebruiken if-statements, else uitspraken in een lus en we implementeren
het getallenspel.
En dan is het laatste wij terugkeer van de hoofdfunctie.
Dus laten we doorgaan en compileren en wat had je tijdens
deze hele oefening moeten doen?
Je had moeten testen en werken in kleine stukjes.
Je had waarschijnlijk moeten hebben begon eerst te werken,
zorg ervoor dat het willekeurige nummer dan werkt testen en compileren en testen.
Start dan je lus.
Zorg ervoor dat je lus alleen loopt het aantal gissingen, maximaal 5 keer en laat dat
dan werken en testen.
Vraag dan het antwoord van de gebruiker wat informatie, ga ermee aan
de slag en test.
Vergelijk vervolgens met wanneer u moet afsluiten als ze raden correct, testen en schrijven dan
je if-statements test, dat is hoe ik zou implementeren.
Dus laten we dit bouwen en kijk of het compileert.
Hopelijk heb ik geen fouten gemaakt.
Ik ga zeggen bouwen.
Ik heb een fout, I ongeldig nummer hebben.
Het moet een willekeurig getal zijn, niet willekeurig, want dat is de
naam van mijn variabele.
En deze keer heb ik 0 fouten 2 waarschuwingen.
ik heb een procent d verwacht wat bijpassende int.
Ik ben vergeten om de . uit te zetten willekeurig getal of de gok.
De gok hier en de raden en de andere.
Ik wil ze vertellen dat hun gok sorry gok was verkeerd, hoef dit niet te
doen, maar gewoon een klein aardig ding.
Laten we het nu bouwen omdat jij altijd uw waarschuwingen wilt oplossen.
U wilt 0 waarschuwing 0 fouten hebben.
Als we dit uitvoeren, moeten we testen.
En er zijn veel verschillende testen zaken die u hier wilt uitvoeren.
U wilt meerdere tests uitvoeren gevallen, want onthoud dat het nooit goed is om slechts
één ding te testen.
Dus hier staat dat dit een gok is spel, ik heb
een getal tussen 0 en 20 gekozen, wat je moet raad, je hebt nog 5 pogingen over.
Dus ik doe er 16 in.
Sorry, 16 is fout, de aantal is minder dan dat.
Ik ga het proberen 8.
8 is fout, minder dan dat.
Ik ga er 4 doen.
4 is fout, mijn nummer is groter dan dat.
Oh ik heb een fout gemaakt, ik had dat niet eerst gelezen.
Het is dus groter dan 8.
Laten we proberen 12.
Ik heb nog maar 2 pogingen.
Ik denk rechts met 12.
Dus er staat gefeliciteerd.
Maar u wilt ook een storing testen.
Wil je een paar dingen testen hier, maar hier, laat me testen en ik
ga mijn gok zeggen en Ik ga gewoon 0 invullen.
0 is fout.
Ik blijf 0 invullen, en daar had ik het denk ik 5 keer mis.
Er staat dat je hebt gehad 5 pogingen en mislukt.
Het nummer dat u wilde raden was 3.
Dus dat werkt.
Laten we nu testen om er zeker van te zijn wat? gebeurt als we ongeldige nummers invoeren.
als ik 45 invul.
Ik zei dat het nummer 0 en 20 is.
Dus dat is nog een testcase en het telde als een poging.
Als ik dat account niet als een . wilde probeer, het kan een geneste lus hebben.
Ik denk dat dat het zo'n beetje is.
We hebben alle gevallen getest.
We hebben de gevallen getest waarin: je raadt het met succes.
We hebben het geval getest waarin: je hebt niet goed geraden.
En we hebben het geval getest waarin: je hebt een ongeldig nummer ingevoerd.
Misschien zou de enige andere test? wees om er zeker van te zijn dat het groter dan en lager dan zei, waarvan ik denk dat
we het in de eerste hebben getest, ons eigenlijk zou
vertellen lager of groter dan in te voeren.
Dus laten we dat proberen.
Dus op dit moment dat ik 20 binnenga, er staat minder dan wat goed is.
Nu ga ik naar binnen 10 en ik raad het al.
Dus ik denk dat ze snel zijn.
Maar we zouden minder moeten zien dan en groter dan in dezelfde output.
Probeer het opnieuw, en de willekeurige nummer werkt omdat ik verschillende nummers genereer
elke keer dat ik het programma start.
20 klopt niet.
Laten we nu proberen 19.
Laten we er 1 proberen en het is groter dan dat.
Dus ik zie meer en minder dan.
Dus ik ben er vrij zeker van dat het werkt.
Lijkt me best goed.
Eén ding had je moeten opmerken er zat een klein foutje in het programma
dat ik je aan het testen was.
Dus toen je het uitvoerde omdat we hebben deze inbraak hier, het gaat nog steeds afdrukken
dat ik heb gefaald ook al is het me gelukt.
Dus je had het moeten merken dat in de vorige uitvoer, ik
denk dat het juiste aantal.
Het is uitgeprint gefeliciteerd.
Maar toen drukte het ook uit I mislukt, dat lijkt me niet goed.
Dus de manier om dat op te lossen ben jij heb je geen
doorbraak, je wilt een terugkeer.
En dus nu wanneer het terugkeert
het wordt niet afgedrukt op regel 39 als je wint.
Het gaat niet afdrukken uit dat je gefaald hebt.
Dus nog een laatste test en je moet hebben dit eerder
opgemerkt, maar als we bouwen en we raden correct, het zal geen fout weergeven.
Dus we kunnen rennen en wanneer we voer deze uit, je hebt 5 keer raden.
Ik ga zeggen 10, minder dan dat.
We gaan zeggen 6, en ik raad het al.
En dat merk je daar er staat gefeliciteerd.
Die extra output zien we niet dat zegt dat ik ook gefaald heb.
Dus je wilt zeker weten dat je voeg die return toe op regel
30 zodat het programma correct werkt.
Je zou nog een if-statement kunnen toevoegen als je
wilde dus dat print de printf niet uit, had een pauze kunnen hebben
hier en dan bij printf had je kunnen controleren hoeveel gissingen je moest ook bepalen of
het minder dan 5 was, gefeliciteerd.
Maar een klein foutje daar, en hopelijk heb je het
tijdens het testen opgemerkt, de terugkeer zal het oplossen.
Een leuk klein programma dus.
Ik hoop dat dit je heeft geholpen bij het leren van een veel
over de looping en al je beslissingsverklaringen en echt probleemoplossend.
Hopelijk heb je dit eruit gekregen en heb dit ontworpen voordat
je daadwerkelijk begon te schrijven code, dat is altijd belangrijk.
Ik hoop dat dit helpt.
Ik zal de broncode verstrekken, zodat u kan het vergelijken en zien en analyseren.
Dank u.