[Halisi kucheza] ZAMYLA CHAN: Je, wewe badala kupokea $ 10,000,000 sasa hivi au kupokea pennies kila siku ya mwezi, ambapo kila siku baadae, kupokea mara mbili ya kiasi cha wewe pennies kupokea siku kabla? Katika pennies, tunakwenda kuthibitisha kwa nini ni lazima dhahiri kuchukua pennies. Kazi yako ni kuandika pennies.c-- mpango kwamba kwanza anauliza jinsi ya mtumiaji siku nyingi zilizopo katika mwezi na kisha anauliza jinsi wengi pennies mtumiaji atapokea siku ya kwanza. mpango lazima basi mahesabu kiasi kwamba mtumiaji itakuwa na kusanyiko mwishoni mwa mwezi na kuonyesha ni. Tunaweza kuvunja mpango huu hadi katika michache ya kazi. Tutaweza haja ya haraka kwa nyingi mtumiaji wa pembejeo - siku na miezi, na pennies siku ya kwanza. Tunahitaji kuweka wimbo wa kiasi gani cha fedha user ana na update kila siku, mara mbili ya kiasi cha pennies kwamba wao kupokea. Na hatimaye, sisi magazeti yao mwisho jumla, katika dola. Hebu kukabiliana user pembejeo kwanza. Mimi naenda kufungua apples.c, short mpango kwamba mikataba na pembejeo na mazao. Saa ya juu hapa, nimekuwa ni pamoja na baadhi ya maktaba kwamba mimi haja - Maktaba CS50 na kiwango I / O maktaba. Mimi magazeti haraka kwa kutumia printf kazi kutoka kiwango I / O maktaba. Lakini halisi uvuvio wa mtumiaji kinatokea katika mstari wa pili na hii GetInt kazi katika maktaba CS50. GetInt inapata pembejeo kutoka kwa mtumiaji na kuhakikisha kwamba pembejeo ni integer. Hivyo mimi kuhifadhi pembejeo mtumiaji katika integer i, toa 1 kutoka i, na kisha magazeti nje thamani mpya kama i. Baada ya kuandaa apples.c kutumia amri ya "kufanya mapera," Nina executable file apples. Mbio kwamba, mimi itabidi pembejeo 1. mpango ananiambia kwamba Nina apples 0 kushoto. Na hivyo kuwa kufanya kazi kama ilivyotarajiwa. Basi hebu kukimbia hii tena na pembejeo hasi 1. Sasa, baada ya kiasi hasi ya apples kweli haina mantiki, lakini mpango anapokea yake, kwa sababu hasi 1, vizuri, ni integer. Na sasa mpango au monster ndani ya mpango anakula hasi apple, na sasa nina hasi 2 apples. Hm, hivyo kwamba ni somo moja - hata ingawa kazi GetInt na kuhusiana kazi, kama GetFlow au GetString kupata data haki ya aina, wewe kuhakikisha kwamba pembejeo hufanya maana kwa ajili ya programu yako. Katika pennies, itakuwa si kufanya tu haraka kwa integer, itabidi kufanya uhakika kwamba mtumiaji pembejeo integer kwamba kufanya maana kupewa mazingira. Mwezi inaweza tu kuwa na 28, 29, 30, au siku 31. Tunataka kuendelea kudai integer halali. Kama wao pembejeo nje integer ya yetu ya mipaka kukubalika, tutaweza kuwashawishi tena na tena, mpaka kutupatia integer halali. Kukumbuka "kurudia mpaka" kuzuia katika Scratch? Unaweza kufanya kujenga sawa katika C kutumia "wakati" kitanzi au "kufanya-wakati" kitanzi. kitanzi wakati muundo ina hali kwamba lazima walikutana kwa ajili ya mwili wa kitanzi kutekeleza. Hii inapaswa kuangalia kidogo sawa, kwa sababu hali ni kama Mwanzo vitalu na pembe na huenda katika mabano ya "wakati" kitanzi. Hivyo sharti kwamba kuangalia kama integer ni ndani ya mipaka sahihi. Unaweza kuchochea integer kutumia GetInt na kisha kutekeleza yako "wakati" kitanzi, kurudia haraka na uchapishaji maelekezo, wakati pembejeo si halali. Njia nyingine ya kuhakikisha sahihi user pembejeo ni kwa kutumia "kufanya-wakati" kitanzi, ambayo ni sawa na kitanzi Wakati. "Kufanya-wakati" kitanzi executes kanuni ndani ndio mwili na kisha hundi kama hali ni alikutana au la. Hii ni muhimu kwa ajili ya kupata user pembejeo, kwa sababu unajua kwamba unahitaji kuwashawishi angalau mara moja. Kama hali ni kukutana, mpango nitafanya line baada ya yako "kufanya-wakati" kitanzi. Kama hali ni alikutana ingawa, kitanzi kurudia "Kufanya-wakati" kitanzi kwa valideringen mtumiaji pembejeo itakuwa kuangalia kitu kama hiki. Mimi kutangaza n kutofautiana, GetInt, na kisha kurudia mpaka n ni halali. Na mchakato huu, nilivyoeleza, ilikuwa kutumia aina integer-data, ambayo itabidi kutumia kwa siku ya mwezi. Lakini tunajua kwamba idadi ya pennies itakuwa rundo juu haraka, hivyo ili kuhifadhi idadi kubwa, kutumia aina data Longlong, lakini kumbuka huo kanuni ya uthibitisho inatumika. Kushangaza, hivyo mara moja tuna mbili halali pembejeo kutoka user - siku katika mwezi na pennies Siku ya kwanza - tunaweza kuhamia kwenye ijayo sehemu ya mpango. siku ya kwanza, user huanza na hata hivyo wengi wao pennies maalum na kiasi cha fedha dinari kwamba wao kupokea siku ya pili ni mara mbili. Hivyo inafanya hisia kwa kuweka wimbo ya hizi kiasi mbili - fedha kiasi gani mtumiaji ana na jinsi pennies wengi wao itabidi itolewe. Sasa, kufanya kitu kwa muda wa siku 28-31 ni repetitive, hivyo hebu kutumia "kwa" kitanzi kwa iterate zaidi ya siku katika mwezi, uppdatering taarifa na senti kiasi kila wakati. "Kwa" kitanzi syntax ina yafuatayo - initialization, hali, na update. Yako "kwa" kitanzi itakuwa initialize kutofautiana, wakati kwanza inaingia kitanzi. Kama hali ni alikutana, mwili ya kitanzi nitafanya. Baada ya hapo, update nitafanya. Kama hali bado ni alikutana, kitanzi nitafanya na update, na kurudia, kwa muda mrefu kama hali yako kutathmini kwa kweli. Hapa ni "kwa" kitanzi kwamba mgawanyiko integer p na 2 jumla ya mara 10. Kumbuka jinsi mimi alitangaza p integer nje ya yangu kitanzi "kwa", ili kwamba integer unaweza kuwa kupatikana nje kitanzi "kwa". Baada ya mwezi amepita, ni wakati kuwaambia mtumiaji fedha kiasi gani wameweza kujipatia. Kwa spec, unahitaji kuwaambia mtumiaji wangapi dola, si jinsi wengi pennies, wana. Lakini hadi sasa, ve naendelea wimbo wa taarifa na pennies kutumia LongLongs, ambayo ni namba nzima. Kuna pennies 100 na $ 1, hivyo isipokuwa idadi ya pennies ni mbalimbali ya 100, itabidi kuwakilisha maeneo decimal. autotype maradufu inaruhusu wewe kufanya hili. Hivyo ni jinsi gani sisi kubadilisha kutoka anayewakilisha pennies kwa dola? Hebu tuangalie pi.c. Mpango huu inachukua big_pi longlong na mgawanyiko ni kwa 100,000, na Prints matokeo kwa maeneo decimal tano. Kama sisi alitaka kuonyesha nne decimal maeneo, basi tunaweza tu kuchukua nafasi hii simu hapa. Basi hebu kuokoa, kukusanya pi, na basi kuona matokeo, ambayo sisi wanatarajia kuwa 3.1415 - mitano ya kwanza ya maadili ya pi. Siyo ingawa. Na kwa nini? Naam, kwa sababu ni big_pi longlong, ambayo ni idadi nzima, ambayo si kuweka wimbo wa decimals. muundo nahitaji kufanya ni katika mgawanyiko. Mimi haja ya kutupwa kwa mara mbili hapa kabla ya kugawa, kwa sababu mara mbili hawezi kuweka wimbo wa maeneo decimal. Na mimi nina kwenda kuongeza line mpya hapa kwa formatting bora. Na hapa tuna yake - 3.1416. Unaweza taarifa kwamba Prints 3.1416 badala ya 3.1415 kama ilivyotarajiwa. Hiyo ni kwa sababu wakati wa raundi mgawanyiko mchakato, kinyume na tu truncating thamani. Sasa unapaswa kuwa na uwezo wa magazeti mwisho taarifa kwa usahihi, ambayo finishes mpango. Hongera. Jina langu ni Zamyla. Na hii ilikuwa pennies. [Halisi kucheza]