[Powered by Google Translate] [♪嗡嗡聲♪] 所以把你介紹給我有什麼在屏幕上; 它是一個在今年夏天,我們開發的工具; 它被稱為CS50空間, 這是我們的合作編碼應用 我們要使用的部分。 這實在是太酷了。 您有任何CS50運行嗎? 讓我拉起來,在另一個選項卡。 Run.cs50.net 所以 如果你去run.cs50.net, 你可以看到這是一個在您的瀏覽器的方式 其實代碼 - 編寫C代碼, 然後運行它, 所以編譯它,運行它,然後返回到你的輸出, 所以這是一個冷靜的方式進行實驗 大衛在課堂上的一些代碼 和我們給你的問題集 沒有真正火起來的家電。 因此,空間做什麼,不同的 如果我切換到該選項卡, 空間是CS50運行,就像你看到這裡, 但是,如果我們滾動,並期待在另一邊的窗口, 你看到的我是唯一的人在這個空間, 但我要問你們加入這個跟我的空間 ,我們將所有的代碼在同一個小窗口, 相互共享代碼, 談論我們的代碼之間的差異。 所以這是一件很酷的事情的一種 - 所以要加入,如果您訪問此鏈接在頂部 我已經強調了, 你可以直接輸入在apps.cs50.net/spaces/vqcspSnO。 好了,所以開始時, 我去給你一點點的參觀。 我們會做一些愚蠢的小編碼與它在第一, 只是讓大家有點的感覺是什麼樣子的, 但我做了什麼 - 我在這裡做什麼 - 我要的代碼,我已經寫在這裡, 正如你現在看到的是空的; 它不會做任何事情。 這只是鍋爐板代碼,我們將調用它。 隨著一點點地做評論。 我要通過點擊此“保存”按鈕保存。 是什麼做的是什麼 強調它在這裡簡單 - 修訂版本保存的綠框, 現在,如果你搜索我的空間, 你點擊我的名字, 你可以看到,我已經得到了本次修訂在這裡, 如果你點擊該版本, 它會加載到你的空間的代碼了。 所以每個人都加載了代碼到他們的空間嗎? 好吧,如果你還沒有,去進取,做到這一點, 那麼我希望你們在這個小的辦節 是使用printf自己寫一點點, 例如,我會寫 printf的(“我的名字是Nate”); 然後我會寫 “我2009年畢業的 從斯坦福大學“ ,我很想聽到 你是哪一年在學校裡, 無論你是在大學或商學院 或其他的哈佛學派, 你正在學習什麼,如果它的未知; 如果它不知道,這是很酷的。 我沒有決定,直到我在我大二的時候已經很晚了。 然後我也很想知道 什麼瘋狂的,你要告訴我,或 類或別的什麼。 當你寫完你的小printf的, 如果你能保存修改,或者更確切地說, 首先要確定,你可以運行它 它打印出的正是你想要它打印出來, 然後如果你繼續前進,並保存該修訂 使用修改保存“按鈕,這小傢伙在這裡, ,我們會有點兒經過,這樣做一簡單介紹。 所以,你應該只需要點擊“播放”按鈕, 這是在左上角, 所以這左上角的播放按鈕將 你的代碼發送到我們的服務器,它被編譯,然後運行。 那麼,什麼是有點瘋狂 這段代碼實際上是在計算機上運行; 它實際上是在互聯網上發送。 怎麼樣了,夏洛特? >>我 - 好了。我 - 我想我 有困難的保存 在服務器上,這樣它可以 - 我可以運行的程序。 然後當我嘗試運行它,它說,有一個錯誤。 聲明為病毒,這是不是在那裡了。 哦,讓我們來看看,你可以點擊保存再? 我看到它在屏幕上。 “對了,好了,所以這是我所擁有的。 我不知道為什麼它不會讓我運行它。 哦,好吧,對不起。 你能解釋為什麼 - 什麼是錯的 - 什麼是不工作? “是啊,因為我沒有看到,有一個最後一行那裡的仍然是一個變量 我沒有宣布,我不打算為它在那裡。 是的,完美的! >>現在,如果我保存它,我認為它應該工作。 現在,你已經救了它,它的工作原理;真棒。 所以,是的,我們通過 - 所以發生了什麼事情, 我只是重複的攝像頭。 發生了什麼事,這個變量s 留在後 - 我想你刪除了一些其他的東西, 你宣布, ,所以這個扔東西了,並沒有讓你運行它。 因此,這正是我們想要做的第 有人嘗試寫不同的代碼塊, 編譯它,看看你的作品,看看有什麼不 然後有點談論這些事情,因為這是跳閘點 我仍然會遇到, 我還是 - 我做很多愚蠢的東西所有的時間, 我不知道為什麼它不工作, 讓我們拉起夏洛特的修訂3, 我們會運行它。 所以,當我運行了,現在我已經拿到了她在這裡的代碼, 我可以放大,打到“運行”按鈕, 上傳它,建立它,運行它, 說,它成功地跑了,如果我向下滾動, 夏洛特是一個大三學生亞當斯房子, 心理學,經濟二次真棒。 很高興見到你! 真棒。 好,繼續,讓我們去丹尼爾, 修訂3, 編譯,運行; 你為什麼不告訴我們一些關於自己,丹尼爾? 給我打電話丹。 我要你們對面的商學院, 我是在海軍陸戰隊員之前,在這裡, 這是我的全部新,所以啊。 不要難過,我30歲,我不知道任何這方面的東西。 真棒,謝謝你,丹! 好了,我們還有丹尼爾。 您的丹尼爾 - 你介紹一下自己,丹尼爾? >>當然,我是丹尼爾。 我是一個大二的學生現在在奧美。 我專注於政府, 但我想藉此CS50,因為我已​​經聽到了巨大的類評論 和我從來沒有嘗試過CS。 向下滾動,並出示此 - 涼。 移動,賈里德。 怎麼了? >>好,你怎麼樣? 正如你可以看到,我是一個初中理念集中在艾略特, 最初由加利福尼亞州南部, 和我採取CS50很感興趣,因為我喜歡它的邏輯, 它在電腦上做的事情,所以看起來真的很酷。 真棒,你是在南加州嗎? “關於一個小時[聽不清]的一個小城市[聽不清]。 哦,是的,我爸從雷德蘭茲。 很酷的東西。 好吧,吉米怎麼了,吉米? >>好,你怎麼樣? 算不錯了! 告訴我們你的。 我是一名大一新生,我不知道我主修 但我有點傾向於經濟學。 像丹尼爾在我面前,我從來沒有做過任何CS,但它聽起來還挺酷的。 我最初來自芝加哥。 真棒。因此,檢查了他的打印輸出。 我想問問,這樣做打印出你所期望的嗎? >>沒有,我忘了打印新的生產線。 我竟然忘了,當我在寫我的事 為第一次,太。 這是一種痛苦,要記得把那些手動。 它會是不錯的,如果它只是知道這是你想要的。 好吧,凱利。 哇,我們有2個的凱麗; 2丹尼爾斯,2凱麗。 因此,凱利 - 你去凱利任嗎? 好了,真棒。 凱利,我的意思。 “所以呀,所以我凱利。 我大二學生Pfoho。 今天,我仍然有7週宣布我的注意力,我收到一封郵件, 所以我試著不去想它, 和我喜歡烘焙,運行和Craisins。 我沒有經驗,大部分的CS; 我教自己建立的網站,我很年輕的時候, 但我想我可能教自己錯了很多次。 希望我會學多一點點 - 是的。 真棒,好,謝謝你。 讓我們去其它Kelly; 我沒有什麼 - 你在這裡說些什麼? >> [聽不清] 在那裡! 太好了! >>所有權利,所以我凱利。 我是第一年的研究生。 我主修心,腦和教育。 在2008年,我畢業於富蘭克林與馬歇爾學院 在心理學和社會​​學專業 未成年人在法國。 我CS50 因為我有興趣在神經科學中獲得博士學位 我覺得這會幫助我了解正在使用的技術。 真棒。 移動,米凱拉。 那是正確的發音嗎? 好了,真棒。 >>,我Mikhaila。 我是一個大二的學生在柯克蘭樓, 我集中在機械工程。 我真的很喜歡騎自行車,自行車在今年夏天建成。 我的CS,其實, 作為的濃度要求, 但你知道,我認為這是尚酷樣的工程類。 真棒 - 你建立了一個自行車今年夏天? >>呀。 哇,像框架和所有呢? >> UH-hunh(肯定的)。 哇,這真的很酷。 >> [卡通攝像頭聊天] [笑聲] 是啊,這是這麼久。 你永遠不知道,對不對? 好了,涼;以及感謝,Mikhaila。 好了,大小姐。 >>我的名字叫大小姐,我是一個大一學生, 因此,這意味著我什麼都不知道! 我想集中在天體物理學。 在CS50, 我覺得肯定會幫助。 我是一個奇怪的事實,我是國家認證的消防隊員。 哇! 這是怎麼回事呢? >>我參加了學院 經歷了地獄了很多週 並得到我的認證。 哇,恭喜! 這是不小的壯舉,是肯定的。 好了,現在我們要做我。 我行中的下一個。 我 - 運行它。 所以我的名字是Nate。 我是2009級在斯坦福大學。 我是一個符號系統的主要 這是心,腦,行為集中在這裡, 但它是一種混合 計算機科學,語言學,心理學和哲學。 樣的 - 是的,有很多奇怪的東西,但它是偉大的, ,然後我做我的主人在計算機科學,以及。 所以,我到哈佛大學今年。 我真的很想進入教學。 我花了近4年在斯坦福大學的TA-計算機科學類 大衛讓我來吧, 我要幫助CS50, 所以我做到這一點的時候,我不是在讀研究生。 這很有趣。 希望它會繼續是有趣的,我敢肯定會的。 所有權利,山姆。 >>我的名字是山姆,我是在大學二年級,在法律上明確。 我主要將是科學史上的可能,VES二次, 我最喜歡的顏色是黃色的。 沒有必要通過判斷或任何東西,但它是一個很好的顏色! 斯特拉。 >>你好,我是斯特拉,我是一個大一的灰色。 我有沒有什麼線索,我尚未集中, 所以CS50是一種隨機, 這是有趣的。 有趣的事實,吉米是哈佛的第一個朋友, 因為我們倆都從芝加哥。 冷卻,格雷斯 - 這應該是非常好的,對不對? >>我想[聽不清]。 哦,是的。 [卡通/關閉攝像頭聊天] 好了,我現在還在學習,還在學習。 因此,我們有別的東西,這是一種有趣的。 是啊,我只是想知道,你有一個想法,是怎麼回事? 你知道該如何解釋呢? >>我本來是要每一行後面的分號。 這是一種痛苦。 有時,這些的分號可以是一個真正的痛苦追查。 所以,事實證明, 我們使用的是今年的特別節目 編譯我們的C代碼被稱為鐺, 的原因,我們已經開始使用鐺今年 - 因為我們沒有使用該程序在過去的; 我們已經使用了另外一個叫GCC,實在是很受歡迎 - 鐺實際上是為您提供了有意義的錯誤消息。 這一個說,“預計”,“表達”之後, 它甚至會告訴你之後,你需要一個分號的表達。 那麼,你修復它? >>是的,沒錯。 真棒,讓我知道,我們將它拉起來,我們將運行它。 但是,是的,把這些分號,是一種痛苦。 我固定的,所以我認為它應該工作。 真棒 - 修訂3。 這看起來像它。 好了,所以現在如果我們運行它, 就這樣吧。 很酷的東西。 好的。 因此,感謝你這樣做。 這極大地滿足了你們。 什麼現在我們要做的就是在接下來的點點 有點潛入的部分問題 從本週的問題來自 我們會做到這一點的大部分路段 的其餘部分的術語, 然後,我們將保存最後15,20分鐘左右 談論的問題本身 ,然後就您有任何其他問題,在一般的類。 這就是說,我們真的很想做 有大家參與 使用空間的東西, 在代碼中扔,扔了建議, 和談論這樣的事情休息時, 或不工作,只是因為這些事情, 我知道我遇到了 當我開始編碼, 真的有點令人沮喪次 因為如果它像凌晨2點之前是由於你的習題集, - 只為披露, 我並沒有開始編程,直到我是一個大二學生。 這是種奇怪的,未知的事情 我聽到的是有點涼 我還聽說它可能是一個真正的痛苦的對接 如果你錯過了一個分號,使你的程序不能正常工作,這是唯一的錯誤 讓你去睡覺, 所以肯定, 如果你有這樣的問題, 如果你有這樣的問題,讓我知道, 因為我要讓你們這是一個很好的經驗。 因此,有你們所有下載的問題還設置? 均田知道它在哪裡?好吧。 所以,我們去cs50.net,因為我沒有在此帳戶, 拉起來的問題集, 拉起來的問題集2,今天我們來看看標準版。 我們會拉規範。 向下滾動。 因此,我們要的問題,在本節開始尋找。 你們看著這些短褲嗎? 好吧。 所以有循環短褲, 這是由湯米,頭部教學研究員之一。 還有一個關於範圍, 我相信,通過另一個教學名叫大衛的傢伙, 愷撒密碼,然後由大衛也做了。 他們很酷。 你們看他們的短褲這麼遠嗎? 還好嗎他們了? 有幫助嗎?好了,好知道。 如果不是這樣,你可以這麼說。 但在此之前, 有你們看著這些問題, 在所有? 讓我們來談談這有點。 因此,我們已經介紹了在過去的幾個星期 在講座 若干不同的循環。 有for循環, while循環,do-whil​​e循環, 在講座中,我們已經談論了很多有關 如何將這些循環 相當類似,在很多方面, 和一個while循環,你可以做同樣的事情 你可以用一個for循環。 你只需要種使用正確的組合變量等。 等真的 所有的循環的真正區別是, 有時,他們更多有用的 使用它們比在另一時間在同一時間。 因此,例如, 從do-whil​​e循環while循環不同的。 大家都覺得像他們有一個很好的處理時 一個do-whil​​e循環更 有用的或有什麼區別嗎? >>我認為所不同的是一個do-whil​​e循環 運行 - 我不知道是怎樣的術語, 但內環路的一系列的功能。 他們自動 - 它至少運行 前檢查的情況下,或在while循環將只運行它時, 連續運行 - 是否得到滿足的條件。 是的,這有意義嗎? 讓我們來看看一點點的代碼。 因此,只要重複的問題, 或答案,而; 得到的答复是, 一個while循環檢查,看看是否條件 您指定的會面 前運行的主體的第一次循環, 而do-whil​​e循環會自動執行循環體, 就是我們所說的 - 這是奇怪的術語, 但如果我說什麼沒有意義的,讓我知道 - 循環體是,你把花括號之間的東西。 在do-whil​​e循環, 該機構獲得至少運行一次, 檢查的條件,然後被運行之前,每個連續的時間。 因此,實際上,山姆, 你不介意編寫一個簡單的while循環 在空間? >>你怎麼有點像 一個新的嗎? 我只是刪除了,無論你在那裡。 是啊,就清除它。 >>好吧,我相信我有這個 - 哪一個你想要的,而你要嗎? 是啊,就做了而真正的,打印的東西。 讓我們來看看。 亞歷山大,我意識到我們從來沒有向你介紹。 “哦,那很好。 你 - 你可以編寫一個do-whil​​e循環的我們嗎? 是的,我會盡力。 好了,我們就拉在屏幕上, 種讓你有一個把手上的差異是什麼。 因此,這裡的山姆做什麼。 他有一個名為i的整數 他的初始化為17。 然後,他說,雖然(INT I = 17) printf的(“我的名字是山姆”); 所以我們運行這個代碼時會發生什麼? 有一個錯誤;錯誤說什麼? 讓我們把它和談論它。 發生錯誤,它說。 讓我們向下滾動。 因此,它給了我們這個錯誤,它說, “嘿,我預計的表達。” 這有點難以理解。 是啊,所以準確 - 再次, 會有另一個小錯誤,我們將趕在第二。 但是,這是另一個那些奇怪的術語的東西, 所以這INT I = 17 是不是一個表達式。 它看起來像它在做什麼,是它的 聲明一個整數叫我 將其設置為等於17 或者說,叫我把17這個int。 這沒有任何意義 在這個while循環的上下文中。 這有一定道理,因為我們可以看到, for循環的背景下,由於環聲明開始 為int i等於什麼 和。 那你有沒有 - 修復的東西,所有的權利。 在這裡,它會真棒。 所以,現在的情況看起來有些不同。 一對夫婦的事情發生了變化。 你能告訴我們什麼事情發生了變化? >>我拿出的int,所以沒有聲明[聽不清],而不是分配。 一個等號,我把2個等號,這意味著一個等號。 真棒。 是啊,所以什麼山姆沒有他拿出的int 這是在這裡, 所以,如果我只是在看這 - 這是早,故稱INT, 宣布 - 讓我們拿出的類型。 int,char和字符串,短, 那些被稱為類型。 所以,你拿出的類型 然後以前, 他只是單一等號 他說的是問題的有關 當你有1個等號, 這是一個賦值運算符。 這不是測試,是否事情都是平等的。 這實際上是設置的東西的東西。 我們將在17號到變量i。 因此,做這種比較, 你必須使用雙等號, 這是一種一個奇怪的事情 但它是一個相當常見的錯誤。 因此,另一件事情,我會指出,如果你不介意的話, 的是,在 在國際主要功能, 你看,我們的身體功能 從左側偏移 4個空格或製表符。 我們這樣做的原因 僅僅是為了提高可讀性。 正如你可以看到這裡在山姆的while循環中, 他並沒有在所有的縮進, 並且不影響的功能的代碼。 它將運行完全一樣的。 因此,舉例來說,如果我們拿出頂端 ,然後按播放按鈕,它會建立, 它會運行它, 什麼事情發生? 為什麼仍然說嗎? >>,因為它會不斷地重複您好。 沒錯,為什麼它不停地重複您好嗎? “由於整數永遠不會改變,所以它總是17。 是的,沒錯,所以 讓我們來看看, - 再次提醒我你的名字嗎? 吉米。吉米說, 您好一遍又一遍不斷重複的原因 是因為這種情況下總是如此。 我們永遠不會改變i的值。 我們永遠不會改變該變量中存儲的內容。 因此,在這一點上,我們得到了這個錯誤, 你的程序產生過多的輸出, 如果我們向下滾動,看看這是怎麼回事種, 你可以看到,它是嗨,嗨,嗨,嗨,嗨,嗨,嗨,一路過關斬將。 真棒。 因此,種回原點 有壓痕這裡 在身體的while循環沒有造成任何影響。 該程序仍運行得很好。 通常,對於良好的作風 - 這是什麼,我們期待在您的問題集 - 我們希望您能縮進4個空格,你可以做 只需按下Tab鍵 或通過手動把自己的4個空格。 酷,好了,讓我們回去看看 亞歷山大的DO-WHILE。 >>只是有點有點麻煩了。 好了,讓我們的工作。 這很酷? >>呀。 好了,所以在這裡我們去。 這是代碼,亞歷山大寫道。 你去亞歷克斯 - 好吧。 因此,這裡的亞歷克斯寫的代碼。 所以,我們已經得到了我們的聲明,主要就在這裡, 然後,我們得到了這個整數變量名為i 被宣布就在這裡。 我們已經有了一個do語句 然後身體再次與這些大括號, 因此,這是人體的DO-WHILE - 讓我在此放大,因此它更具可讀性 - 在身,我們正在試圖打印“,這是身體”, 我+ +, 因此,增加的內容,我這樣做 直到i得到為3, 那麼,我們的程序結束。 所以當我們運行這個程序時,會發生什麼呢? >>我預期的標識符。 好了,因此,建立,運行,就會發生錯誤。 發生了什麼? 我們向下滾動, 我們得到這個有些神秘的東西, 預計分號後的頂級聲明。 這是有點怪異。 沒有任何人有一個想法可能是什麼回事上? 有點不可思議,是的。 >> [聽不清]聲明以外的括號? 那麼,不適用,那麼當您使用括號嗎? 因此,他宣稱這其中括號外的傢伙? 噢,這些傢伙 - 在大括號? >>呀。 是的,沒錯。 所以,事實證明, 你可以聲明一個變量實際上不是在這裡是這樣的。 你可能一直在試圖做的是 - 削減它的存在 - 你可以把它在大括號在這裡 或另一種選擇 是把它完全脫離。 所以,這些 - 這取決於你居然把聲明 該整數變量, 你可以得到2個不同類型的變量; 時,它的主要外, 這就是我們所說的一個全局變量。 它的範圍以外的任何的功能 - 這是不是在函數 - 而如果我們把它裡面的主, 喜歡這裡,然後它被稱為局部變量, 因為它是本地的主要範圍。 我們將討論多一點點的區別是什麼 之間的2種類型,以及為什麼要使用不同類型的變量, 但現在, 你可以保持所有的局部變量, 因為我們沒有任何需要全局變量。 好了,所以這是一件事。 讓我們嘗試再次運行這個,看看會發生什麼。 運行“,另一個錯誤。 放大一點,我們都能得到什麼呢? 後做/而我們得到這一預期的括號。 任何想法,這是怎麼回事呢?丹? “一會兒,然後括號,然後 - 我不知道,如果你需要重新定義詮釋, 但的do while(i <3的)。 沒錯,是的。 因此,原來,丹完全正確。 我們沒有必要再在這裡把這個類型。 相反,我們可以殺死類型 做到這一點。 好的。 我會放大,嘗試更多的時間。 看它運行成功。 如果我們向下滾動,“這是身體的”打印出來的3倍。 這是非常甜蜜的。 幹得好,幹得好,伙計們。 幹得好。 怎麼這麼遠嗎? 體面的步伐? 好了,爽。 因此,作為一種回到原來的問題, 我們 - 現在如果我們看到了差距, 您看,這do-whil​​e循環, 條件是最後的。 因此,隨著計算機讀取程序 種在這個順序執行C程序, 他們從字面上開始與第一線的主要 然後執行第6行,第7行,第8行,第9行中, 第10行,第11行, 這一切的東西在這裡的右上角 要執行一次 之前我們曾經測試情況,以 是否我 - 的內容我,而 - 小於數字3。 只有一次,我們到12號線, 的內容的i是小於3 我們跳轉到第7行 然後重複這個過程中, 然後我們測試的條​​件,再一遍又一遍。 因此,我們可以對比 - 縮放退了出去, 向下滾動到山姆的版本, 我們要看看這個,稍有改變,因此,它不再是一個無限循環 - 如果我們放大, 我們可以看到,這個程序執行, 它會首先聲明INT I, 設置的i的內容是0, 然後它擊中的while循環的第一條件, 因此,在這種情況下,這個身體,這個printf(“HI”)和i + + 甚至不會執行 除非實際上i是小於或等於2。 因此,如果i是3,例如, 如果我們在這裡 等於4 - 或者我會做,因為我說3 - 然後運行它, 它會建立,它會運行完全正常, ,但它不會打印出任何東西, 因為它對於第一種情況,測試失敗。 因此,在課堂上,我們談到了為什麼這些do-whil​​e循環 是有用的,有時 為什麼我們會使用它,而不是一個while循環。 在那裡 - 你們有任何的建議 為什麼do-whil​​e循環可能更為有用嗎? >>嗯,我想do-whil​​e循環是,如果你希望用戶輸入, 因為這樣可以讓他們 把東西一次,如果它是正確的, 我們可以移動到程序的其餘部分, 但如果它是不正確的,那麼你繼續提示用戶 直到你把正確的輸入。 是的,沒錯 - 這正是, 因此do-whil​​e循環是有益的 提示用戶輸入,因為當 因為你需要得到用戶的輸入,才能真正檢查。 在pset中1,在pset中2, 您在何處提示用戶輸入了很多, 這是一個方便的事情 而不是只是一個簡單的while循環。 如果您使用一個while循環,你可以做同樣的事情 - 你可以做同樣的事情,一個while循環 當你做一個do-whil​​e循環。 你只需要種有這個重複的過程 你在哪裡得到的輸入,然後開始你的while循環。 而一個do-whil​​e循環,你只需要編寫一次 這是一個很大清潔。 好的。 有什麼問題嗎? 有意義嗎? >>返回0 - 那只是種一檔或者是 - ? 是啊,所以我們可以 - 好了,我們將討論這有點多了以後 但事實證明, 我們把這個返回0, 結束時的主所有的時間 - 你可以還挺只是把它作為我們做的事情 暫時。 現在我們開始談論與功能 種在上週結束,本週再次 是,函數 需要輸入括號內的這些東西; 這是2個輸入,參數或參數, 他們也被稱為我們的主要功能, 然後一個函數產生一個輸出 我們調用的返回值。 和返回值的情況下,主要是這樣的詮釋, 這個整數, 告訴函數的方式,“嘿,這是你的輸出 將是“是”回歸“這個詞, 該關鍵字,而 等主返回0 或主輸出0 在C程序中的標準 從主要手段,因為返回0 “嘿,一切執行我的程序就好了。” 如果我們把其他的東西比0, 如1中,例如, 這是用來告訴運行這個程序 出事了。 所以,當我們在這學期更複雜的東西, 如果你曾經可以說, “哎呀,你知道的,出了這個程序錯誤” 而不是我的程序崩潰,我想通知 亞軍我的程序出現了錯誤, 您可以使用返回值, 我們稱呼它,這是不為0。 所以我們將討論多一點點 一旦我們進入功能。 諸如此類的有道理嗎? 好吧。 函數是一種奇怪的 - 我認為有很多的數學背景的人, 談到更容易一點, 特別是如果你有一點點抽象的數學背景 和你談論功能 和所有類似的東西。 但我們會盡力並覆蓋 去很好的和緩慢的,因為他們來了。 同樣,這整個的int argc個, 的char * argv的[] 現在,你也可以把它看作鍋爐板。 我們已經開始覆蓋那些在演講一點點 當我們談論到程序中的命令行參數獲得通過, 但在你的習題集和你的程序, 這是完全正常,只是寫作廢,並保持它的簡單。 無效的意思是, “嘿,主要是不會接受任何輸入; 這僅僅是一個程序,我們會剛剛運行。 我們不會給它任何額外信息。 我們每次啟動運行。“ 所以現在,你可以做到這一點; 你甚至也可以省略return 0 您的程序結束時,他們會運行得很好, 但我建議只是保持,在。 在幾個星期中,我們將開始種 拉回來蓋一點點,更多的了解 所有這些不同的小運動部件。 好了,現在讓我們來談談我們在這裡的第二個問題。 那麼什麼是“未聲明的標識符”,則通常表明 如果輸出鐺? 我想我們可能已經看到,今天已經。 有人可以給一個回顧一下這是什麼意思呢? 讓我們來看看,凱利 - 的凱麗之一。 >> - 是啊,這是什麼 - >>我認為,當你一樣,不聲明變量,並嘗試使用它。 是的,沒錯,沒錯。 所以,如果你看到這樣的輸出 當您嘗試編譯程序, 就像凱利說, 這意味著你使用一個變量,你沒有申報, 所以,如果我回到我們的空間, 我做這樣的事情 輸出( “您好%s”) 和嘗試,並填寫%s的 ,我沒有任何地方聲明一個變量s 我嘗試運行它, 你會看到我所得到的,在這個底部就在這裡: “使用未聲明的標識符”S“”; 這只是意味著你不聲明你的變量。 同樣的事情發生,如果 你有X,你嘗試和存儲7 和我沒有申報X. 我得到了同樣的錯誤: “使用未聲明的標識符'X'”。 好吧, 所以愷撒密碼,不是很安全, 我將讓你們看這短短的,一種明白為什麼, 後,希望做這個星期的問題集 在那裡你寫的愷撒密碼,你就會明白一點點 它的意思是什麼一個安全的和不安全 - 或不安全,我猜 - 不安全略有不同。 另一件事是,我們這些其他的問題在這裡 有關職能 和功能是什麼, 我們種,簡要談到,當我們談到的返回值; 為有人的演講, 你可以回顧一下誰是今天講課的嗎? 好的。 讓我們來看看,讓我們 - 有人可以告訴我們的功能是什麼? 凱利? >>基本上是借鑒的東西,寫的庫 更複雜的那邊,然後你只寫一個簡短的形式, 那麼喜歡你是指該庫,使用 所有的長碼和[聽不清]。 是的,沒錯,然後你想添加的東西嗎? >>是的,我把它作為類似數學公式的概念 你只寫一個公式,然後你可以插入變量 這就是一個功能是聽不見的。 是啊,所以我們有一對夫婦的答案在這裡 都非常好,右。 有指使你的代碼庫中的某處被寫入 是更複雜的 然後你可以借鑒的代碼 真正地使用它,只是寫的簡短形式 - 或者說,它的名字 - 再有就是數學中的公式比較 或物理,所有這樣的東西; 你有一個公式 然後,您可以插入 該公式的變量 然後公式得到的結果, 讓你覺得它像一元二次方程。 試想一下,如果,而不是了解 二次方程求根公式是什麼在數學課上, 你只是有一個小的計算器程序,這樣做是為了你。 有沒有人在高中數學課中使用的計算器程序? 是啊,物理課嗎? 在那裡你可以說,“嘿,二次公式。 這些都是我要輸入的變量。 現在給我答案。“ 這是一種功能是什麼。 這是一個方式,讓我們 種寫像一個小的小的子計劃 在我們的程序 並用它一遍又一遍 所以,我們不必複製和粘貼代碼, 我們可以給它不同的輸入和得到不同的輸出, 這是超級方便 當你試圖在不同的時間寫不同的程序。 因此,舉例來說,一個功能,我們已經使用了一遍又一遍,一遍又一遍 整個過程是printf。 printf是本身就是一個函數 事實證明,它實際上是一個相當漫長而複雜的, 討厭的,寫的功能。 因此,簡單的,因為在我們看來, 要打印的東西輸出到屏幕上, 因為我們都只是做節今天開始, 事實證明,它實際上是,你知道, 一個很好的情侶幾百行代碼。 這不是我真的願意寫,可以肯定, 但我們每天都使用它,這是一種很酷的, 所以我們把它分享給對方, 不同的程序, 所以我們就到功能更潛水; 暫時,我們不 - 我們要編寫的唯一功能是主要的。 主本身也是一個函數, 你可以看到它有它的輸出, 它的輸入就像我們談到, 那麼它的名字,這是主要的。 主要是怎麼樣的 - 那裡是一個特殊的功能。 在你的C程序中,必須有一個主要功能, 所以現在,我們已經遺漏的寫作 的原型,或聲明的,主要的。 我們已經給了你, 我們剛剛有你填寫的空白種。 >>因此,對於第二個問題集,我們並不需要 把它寫在第二個功能嗎? 我不這麼認為。 我相信,這一切都在這裡。 是啊,所以愷撒密碼, 你沒有,它看起來並不像, 維瓊內爾,你不要么, - 事實證明,你沒有真正寫 的功能,對不對? 你打電話總是把所有的代碼在main, 許多程序員做到這一點。 隨著我們繼續前進, 我們開始引入功能的一種方式 清理你的代碼, ,使其更加優雅, 如果你有當我們談到循環任務 - 有點像, 有時有一些事情你想做的事一而再,再而三, 你有一種天真的方式 - 也就是我們常稱的“稻草人”的解決方案, 只需複製並粘貼一遍又一遍 - 你可以做同樣的事情的功能,您只需複製並粘貼 一遍又一遍相同的代碼, 但漲大了你的代碼 - 最終使你的代碼很長的 - 它也變得有點混亂, 那麼就意味著,你是不是能夠喜歡 - 如果你想再次使用該代碼在另一個程序中, 你還堅持再次複製和粘貼, 這樣的事情之一,我們來談談 種你的程序的設計和風格, 因此,當它是有道理的種 包的東西,並把它作為一個單獨的函數, 我們鼓勵你這樣做, 那是,再次 有沒有硬性規定。 我們很少說,你必須寫一個函數調用此, 但更重要的是,一個人的東西,你只是隨著時間的發展 為你寫的節目越來越多。 還有什麼問題嗎? 好吧,讓我們現在 返回這個傢伙在這裡, 所以,我仍然在這部分問題。 我們已經討論了所有這些不同的, 什麼是一個函數,為什麼寫功能, 當你可以複製和粘貼? 希望我們確信你寫功能是一件好事。 所以,現在讓我們繼續這MySpace的計劃, 我們會花一點點的時間這樣做。 所以,讓我們來看看, 我有一個人讀這個嗎? 讓我們Mikhaila - 你閱讀這篇文章,我們呢? >>你的意思是回來時,MySpace的 - 回來時,MySpace是酷。 “返回時,MySpace是涼爽, 這是所有的憤怒,象這樣。 也許它仍然是嗎?我真的不知道。 在任何情況下,使用CS50電器, CS50運行,或CS50空間的的, 寫一個程序,提示用戶的消息 它的第一個字母大寫,然後輸出信息, 在交替的情況下,與所有其他字母, 如下面的示例輸出, 其中粗體文字表示一些用戶的輸入。 為簡單起見,你可以假設用戶 只能輸入小寫字母和空格。 考慮這個問題的一個練習的機會; 你不會被要求提交這一計劃。“ 真棒,謝謝你。 因此,作為Mikhaila說, 我們要編寫一個程序,MySpaces你的代碼。 因此,沒有任何你們使用MySpace上嗎? 你有任何MySpace帳戶? 哦,是啊,是啊! 這是很酷。 [笑聲] 我知道。 約會自己。 所以我們正在試圖做的是寫一個程序, 經過 的首字母大寫 然後此後的每一個字母 - 其後或其他字母,對不起。 所以 - 你可以看到在這個例子中, 這是怎麼了,我們運行程序, 所以這只是說,“我們正在運行一個名為a.out的程序。 我們要賦予它的輸入, 將被提示。 我們不是讓你去提供在命令行上輸入“。 如果你一直遵循所有的演講 和聽到的命令行參數, 這是種者 - 那時髦的語法 在主要的用int argc個,所有的東西, 所以在這裡我們沒有使用;我們並沒有任何的處理。 我們只是得到這類型的用戶, 那麼這第二個行與時髦的資本 是什麼,我們希望我們的程序輸出。 因此,而不是使用設備或運行中,我們將使用空間, 因為我們有空間, 因此,如果你們會 讓你的代碼看起來像這樣, 所以我要救這個修訂 只是讓你在這裡得到了鍋爐板 像這樣的,詮釋的主要(無效),什麼​​也沒有。 其實,我們要做的是,我們只是刪除一切。 我們希望有一個空白的石板, 因為我們不會開始編寫代碼; 相反,我們要去嘗試寫一些偽代碼 這真的只是意味著我們將寫的東西,這不是代碼 這樣的描述,我們想要做的是什麼, 有點像大衛那樣在第一天的演講, 我想是第二天的演講時,他做了整個襪子演示。 你們還記得 - 看到襪子呢? 約瑟夫是在那裡種輸入中英文嗎? 所以,我們要做同樣的事情。 所以,當我開始寫偽代碼, 我喜歡的輸入將是開始。 我給自己一個樣品的情況下, 所以像添加“謝謝!” 然後我也寫的是什麼,我想要的輸出, 在這種情況下是這樣的事情。 給了我一個這樣的好事,比如,開始認為, “好吧,我想採取1號線 我想將其改造成2行,“ 而這種幫助引導我的思想。 這是一個良好的開端。 另一種思考方式,也為我們還挺移動 和你這樣做,是在自己的程序 認為像邊緣的情況下,這是什麼樣的呢? 是什麼樣的怪異的情景嗎? 奇怪的投入,我們可能會得到什麼? 這些產出應該是什麼樣子? 例如,一個奇怪的輸入 會是這一個, 創建絕對沒問題, 像我們在這種情況下,輸出嗎? 我們想要的東西去思考,太。 因此,正如一個問題, 我們可能要輸出什麼? 如果我們沒有得到任何輸入,如果我們的程序輸出? “什麼也沒有。 什麼都沒有?聽起來很不錯。 因此,我們要確保我們不寫任何東西 如果我們沒有得到任何東西英寸 酷。好吧。 所以 我要叫上幾個人,我們去通過 只是有點像一般的算法是什麼 樣開始,我們會一起度過這次難關。 所以,讓我們來看看。大小姐。 您如何看待我們就開始嗎? 這將是一個好地方,從這裡開始 如果我們要進行改造,比如,1號線 到第2行嗎? 你能種只是向我解釋,英語,你在想什麼? 不要擔心代碼。 >>我會做的第一件事情將是 種直接用戶,告訴他們你想要什麼。 好了,所以,比如說, “嘿,用戶,我想 一個字符串“ - 真棒。 因此,讓我們把這個寫下來。 提示用戶輸入一個字符串。 這聽起來像一個良好的開端。 好的。 讓我們問凱利任。 什麼我們願意做的事嗎? 我們的未來是什麼樣的 - ? >>收集他們的意見,並將其存儲為一個變量。 大。 因此,收集的字符串, 它存儲在變量中。 那麼,有沒有什麼特別的,我們要在這裡做嗎? 我們要檢查他們的意見 前 - ? >>呀。 我們可能要檢查什麼? >>嗯,你說我們沒有檢查它是否是一個數字,對嗎? 因為它會假設它是小寫嗎? 是啊。 因此,原來, - 是啊。 因此,保證返回一個字符串的getString。 它不會返回一個數字或類似的東西。 有可能是數字字符在該字符串。 而這些,我們可以忽略,因為我們沒有資本化。 但一個空字符串是完全正常的, 這樣的情況下,於4日和5號線在這裡, 正確的,那裡沒有輸入, 我們已經把什麼作為輸出。 我們不必擔心肯定有什麼東西在字符串中 該字符串是至少4個字符長; 什麼是好的。 因此,這是對比,例如,像便士你寫的程序, 其中,以確保你得到非負數; 你必須確保你得到正確的天數在一個月內。 如何你們這樣做嗎? 你將如何做這個測試嗎? 那是什麼要求你使用嗎? >> do-whil​​e循環。 do-whil​​e循環,其他類型的循環,太多,是的。 因此,原來,我們沒有在這種情況下,使用一個循環, 當我們提示的字符串,這是一種不錯的。 好吧,繼續前進。 所以,斯特拉。 你能告訴我們什麼,我們下一步應該做的一點點嗎? 現在,我們已經得到的字符串,我們已經有了它存儲在一個變量; 的字符串,我們需要做的是什麼? >>我們需要 - 識別的2 - 是啊,就用英語說,這是真棒。 >>確定[聽不清]首都 - 或大寫字母。 是啊,所以你識別哪些是大寫和小寫。 我們可以沒有他們,直到我們已經確定了哪些大寫或小寫。 因此,我們將在這裡。 所以,只要一想到這個過程中, 我們怎麼做這個鑑定呢? 你知道嗎,丹? 種什麼,我們 - 我們不得不使用我們的工具箱裡什麼工具? >>我把它在某種方式中像一個數組或每行 是它自己的小盒子, 然後大寫有或沒有。 好了,所以我們可以利用的一個工具,是一個數組。 我們有什麼看在字符串中的, 不過,要弄清楚 - 我們有看的字符。 “所以,你得看在字符串的長度? 是啊,所以得到的字符串的長度。 只是出於好奇,我們用它來得到一個字符串的長度? >> strlen的? 是啊,strlen的,我們稱之為“strlen的” 所有這些字符串函數,所以strlen的是一個函數, 這是超級方便的,因為我們可以用它來只是說, 嘿,strlen的:這是一個字符串,你能告訴我它有多長。 在今天的演講中,大衛談了很多關於如何strlen的實施, 幕後到底發生了什麼。 但是這是一個非常超級方便的。 有也字符串中的庫的其他那些, 如STRCMP的拼寫是“STRCMP”, 這是用來相互比較字符串。 您將使用函數strstr一樣, 這是很好的發現子串等。 在大多數情況下,他們開始用str,然後去別的東西。 的原因,他們沒有實際拼寫,如字符串,等等 因為早在初期的C一樣, 當人們第一次寫操作,這一切, 他們,你可以使用的字符數限制 函數名和變量名, 所以,一切都像超濃縮。 但是,任何時候,你看到的東西,開始用str, 通常是指有做一個字符串。 好了,你已經得到了字符串的長度, 然後,我們做的字符? 你知道嗎,薩姆? >>我不知道,我正試圖弄明白。 我真的不知道 - 我希望有一些方法 - 我的意思是,我想,也許我們可以做一些事情的賠率,均勻, 但我不知道任何這樣的功能。 是啊。 “但是,這 - 它不一定會工作, 因為那樣的話,你會得到的空間 - 你就必須有足夠的空間,以獲得關於如何 - 好吧。 我不知道 - 我在這一點上失去了。 是啊 - 不,不,不,這些都是很好的點。 所以,我們需要做的是,像薩姆說, 我們需要跟踪的字母是奇怪的字母, 的,哪些是偶數字母。 但是,我們要確保我們不只是尋找 在奇數場和偶數 指數在字符串中, 而是尋找在字符串中的奇數和偶數的字母, 因此,我們需要還挺有這之間的區別 字母 - 像實際上是A,B,C,D等, 什麼事都沒有字母,但仍然在我們的字符串。 例如,在這裡,像這樣的感嘆點是不信, 但它仍然是我們的字符串的一部分,它仍然是一個字符。 同樣,所有的這些空間 - 不利用的空間,對不對? 因此,我們要確保我們莫名其妙地跳過這些 ,同時還跟踪總入球數單。 所以在我們的編程工具箱 到目前為止,如果你願意, 我們有許多不同的工具,我們已經談到了。 因此在一個,例如,是變量, 就像我們以前談到這裡。 另一種工具,我們所談論的是功能。 因此,我們已經討論過的變量,我們的偽代碼在這裡 正如我們將用它來存儲我們的字符串。 我們已經討論了函數來獲取一個字符串的長度,如strlen的。 我們一直在談論別的事情,我們已經談論了 進行了大量前面部分的今天:循環。 你們覺得在這個程序中使用循環? 賈里德,你有什麼感想? 在這個程序中,我們使用一個循環? “也許不,不,因為你沒有去多一次。 好了,你沒有通過什麼去多一次? >>的整個字符串。 好,那你不有一次去的字符串全。 遺憾的是,絕對沒有任何意義! 你不必去通過整個字符串不止一次。 好吧。 你怎麼想? >>我認為這是更好地使用它們 所以我們可以這樣做利用,而 它的位置是[聽不清]數。 太好了,所以利用什麼? 好了,所以我們說, 因為我們想,我們應該使用一個循環 大寫字母,雖然它不是一個數字。 - 對不起,沒有您要添加嗎? >>我要說的話,你的方式治療的字符串 [聽不清]將[聽不清]的字符? 是啊。 >>,然後我們可以指定號碼 - 或基於位置的字符串中的字母? 是啊。 >>,並確定它是否是奇數或偶數和大寫字母本身 而信的位置是聽不見的 - 對不起。 大。 因此,只要回顧一下。 你的名字,你能提醒我 - 我很抱歉。 “夏洛特。 夏洛特,沒問題。 那麼,什麼夏洛特說, 這是完全正確的 - 天哪,我喜歡汽車縮進 - 是,如果我們檢查一個字符串 如這一個在頂部 - “謝謝你的”添加“ - 為一個字符序列 在位置0, h是在位置1。 一個是在2,然後我們得到了3,4,5; 的空間是在6位。 鑑於 - f的位置是什麼? 7! O? 8。 R? 9。 然後,我們得到了10,然後我真的不能沒有它的把它寫 有點讓凌亂的在屏幕上。 但是,這其實是我們可以談論如何在內存中的字符串。 它是一個字符串 是一個字符序列, 當我們提到一個單個的字符在字符串中, 我們經常這樣做參照該字符的位置 在字符串中, 可能以同樣的方式,當我們談論九月 的第九個月的一年 或星期一是一周的第一天。 因此,這為我們提供了一種方法, 找出哪些是奇與偶 因為你可以在這裡看到, 如果我們符合了這件T, 你可以看到,所有符合資本化條件的 在偶數位置, 至少在第一個字, 然後事情變得揭去後,我們打的空間, 因為我們不指望這個空間為一個字母, 所以,如果我們開始 去0,1,2,3,4,5, 空間,6,7,8,空間, 9,然後10,11,12,並依此類推。 酷,所以我們肯定會想使用某種循環 去中的每個字符。 因此,在這一點上, 我們再回過頭來我們這裡的老偽代碼。 作為這個識別哪些 是大寫的,哪些是小寫, 我們將要做到這一點,在某種循環。 “循環”,冒號。 什麼樣的類型,我們的循環,循環, 似乎是一個很好的使用在這種情況下? >>我想在for循環。 你為什麼要思考的for循環? >>因為它從0開始,然後 當我們到達字符串的長度, ,然後每次迭代中,您可以[聽不清]嗎? 是的,沒錯。 因此,出於不同的選擇的循環, 我們有for循環,while循環,do-whil​​e循環。 一個for循環是特別有用的 當你想知道 你在循環中的一種, 循環已經執行了多少次為止。 這正是我們想知道在這種情況下, 像凱利說, 根據夏洛特的先前的評論,我們想知道的位置 在字符串中的字符, 和for循環會給我們帶來了這一點, 因為,如果我們回頭看我們的字符串開始種, 如果我們開始我們的for循環為0, 我們去到的整個字符串的長度, 然後,我們可以將字母T 0的循環, 字母H與1在我們的for循環,依此類推, 將所有的方式通過字符串的結尾。 因此,讓我們開始編碼這只是一點點 只是讓你們得到的感覺,這看起來像。 我要救, 所以在這裡,我們已經得到了我們的偽代碼, 我要刪除一切。 所以,我有一個空白的石板。 我要開始寫詮釋的主要(無效) { 我會把返回0 然後}。 因此,通常當我開始計劃,這是我的開始。 我會保存它,以便你們有它。 因此,我們談論的第一件事情之一是 得到來自用戶的輸入 並把它存儲在一個字符串中。 我們怎樣才能從用戶的輸入? >> GetString的。 GetString時,所有的權利。 所以,如果我輸入的GetString() 和分號。 讓我們嘗試運行來看,第一呢? 為什麼不運行? >>您必須聲明變量。 我要聲明一個變量。好吧。 那麼,如何才能做到這一點? 你不介意寫的東西,分享了嗎? 然後,我們可以把它拽上來。 讓我們來看看,但正確的,沒問題。 大牛。複製,字符串輸入的GetString()。 真棒。 這會不會跑? 讓我們試試吧。 命中來看,上載源代碼,建築,發生了錯誤。 好吧。 因此,whats怎麼回事呢? 使用未聲明的標識符“字符串”。 >>我們有包括庫嗎? 是啊,所以丹說,我們有包括庫。 這是你會說,斯特拉?真棒。 這是可怕的,所以斯特拉,你能 複製此代碼的丹尼爾的空間? 如果您點擊上丹尼爾·羅蘭文,將其複製, 然後你把include行,然後保存它嗎? 讓我知道,當你準備好了。 因此,這包括語法也是一種時髦; 有這樣的散列標籤, 的,然後有這些尖括號。 你還記得是如何工作的,或者我應該把它放在這個代碼在這裡嗎? >>我很好。 好吧。 >>我打印了 - 我不知道哪個庫,雖然。 哦,好吧 - 是的,所以它的的CS50庫。 哦,我把stdio庫。 哦,找到了 - 啊,不,that's - 所以,字符串實際上是一些特別CS50。 其實是不是一個真正的字符串類型 因為在這裡,字符串類型的位置 - 我們要聲明一個變量稱為輸入字符串類型的 - 我們把裡面的輸入 得到的值返回給我們:這GetString函數調用的輸出。 可以說這是一個函數調用,因為它得到了括號,就像printf並 就像strlen的。 但是,字符串實際上是不是一個真正的類型 在C語言中。 我們已經取得了一個類型,我們會採取更多的它究竟是什麼 C,因為有一種方法使用字符串; 我們剛剛做的東西,使它看起來更好一點。 所以,在這裡,我們走了。 下面是Stella的代碼。 它得到了包括。 其他人會稱此如哈希有時,或尖銳包括。 現在,我們可以啟動它,運行它, 我們還得到一個錯誤。 讓我們來看看發生了什麼事。 “未使用的變量'輸入'。” 好了,所以這很酷,這很酷。 我的意思是,這不是真的很酷, 因為我們得到一個錯誤,它沒有運行, 但是這是說的是, 我們還沒有使用我們的變量,這是有道理的。 我們還沒有嘗試用它做什麼。 這是一種方式, 鐺正試圖幫助我們確保我們不只是使用變量 然後在不經意間調用他們別的事情後來在我們的代碼中, 幫助我們避免錯誤的方法。 所有的權利,因此,我們已經得到了來自用戶的輸入, 我們把它存儲在變量中。 下一步是那麼 在所有的字符在字符串中開始尋找 並確定哪些是大寫 哪些是小寫的。 而像凱利和夏洛特長大了, 我們使用一個for循環。 因此,任何人都不會記得一個for循環的語法 並希望藉此刺在只寫 在fo​​r循環的第一行,只是位嗎? 凱利,你想給它一個嘗試? 呀,所以你必須先進行初始化, 所以我把我= 0, 然後我做了我>呀,所以 - 我的意思是,我有錯誤,所以 - 啊,不,it's - “所以,我想叫我只是”字符串“的字符串。 我想打印出字符串 然後我 - 我想喜歡像一個數組中的每個字符的字符串 不同的[聽不見的,對不對? 然後我想在位置0開始 然後每2位, 我要利用, 所以我剛才所描述的為23,因為我一直在尋找的ASCII表。 所以,這就是我在想 - 我知道這是不對的。 得到它,所以這是一個很好的開始。 我想了很多的框架是在這裡舉行。 讓我們通過逐行種,看看會發生什麼。 所以我喜歡的方式做到這一點,剛開始編譯代碼 並讓編譯器告訴我,像我的代碼有什麼錯, 因為編譯器會告訴你,什麼是錯的,你的代碼是非常好的。 因此,如果我們發揮,建築,它沒有建立。 它說有一個錯誤, 因此,如果我們向下滾動,並期待在第一個錯誤, 它說 - 滾動到頂部, 我們可以看到有5個在底部產生的錯誤。 哎呀,這是真正切斷。 我猜這只是不會得到任何好轉。 在這裡,我們走了。 因此,總有5所產生的錯誤。 在這裡,我只能看到第2, 這樣我就可以移動一點點,然後向上滾動種。 這是運行的命令來編譯代碼, 然後file.c的第一個錯誤是在這裡: “預計識別或”(“”,是在這條線 在這裡我們說的字符串= getString()方法。 在這裡你可以看到,它是在第8行file.c, 然後我相信這是12字符 - 這是錯誤的。 那麼,這是怎麼回事第8行 - 凱利錯誤嗎? >>您只需要調用它一樣,一個字母或什麼的, 如字符串s或東西嗎? 是啊,所以事實證明,這些特殊類型的名稱, 這樣的字符串,整型,字符型,短, 他們都是特殊的關鍵字, ,你不能使用他們的姓名您的變量, 因為編譯器看,並說, “哦,我知道這是一個類型,” 所以,你不能真正稱為字符串有一個字符串變量, 我想在這裡做的,這將無法工作。 但相反,我們可以把它像S或ST或str。 我們也沒辦法把它詮釋。 我們不能有一個字符串調用int。 我們不能有一個稱為字符的字符串,沒有這些工作。 因此,我們將只需要調用它的暫時。 真棒。 那麼下一步是什麼在這條線是怎麼回事? 字符串 - 這條線看起來很不錯嗎? 讓我們給它一個嘗試,讓我們來運行它。 好了,我們仍然出現錯誤。 這一次,我們4個錯誤。 因此,我們得到其中之一。 讓我們繼續。 “意外的類型名稱的字符串:預期的表情,”是嗎? “是的,那是因為我試圖命名的字符串。 是啊,所以它看起來像我們現在也有去修復 所有這些引用字符串。 你可以看到這裡有一個參考字符串,在這裡,在這裡, 因此,我們可以將所有這些為s。 大。好了,再次運行它。 大廈 - 另一個錯誤的發生。 好了,現在我們已經到了一個錯誤, 所以int i = s,然後在方括號。 所以你能告訴我們一點關於你在這裡做什麼,凱利? “是的。 這是第10行。 >>我不知道,如果我們需要它, 但我認為我是想 - 所以你可以跟著我將它保存。 >>我想我是 想告訴它開始在位置0 在我的for循環的開始, 所以我覺得也許該說是不必要的。 因此,只要回顧一下, 你說,這 - 你試圖啟動該位置0 得到這個 - 是的, 過,所以我覺得所說,當你步行通過的代碼, 你在談論你想如何處理字符串作為一個數組 這樣我們就可以訪問每個字符單獨。 我覺得丹提到過,陣列,試圖將字符串轉換成數組。 事實證明,這樣的引擎蓋下, 實際存儲為一個字符串數組了, 您可以訪問它像一個數組; 有沒有轉換,你必須做的。 一個字符串,isn't - 所以 - 一個字符串是不是一個真正的陣列, 但您可以訪問它是這樣的,因為所有的字符都存儲 一個正確的彼此相鄰的,在內存中, 所以,如果你想要得到的第一個字符的字符串, 為獲得一個整數數組的第一個整數是相同的。 所以我們經常 - 我們就會 參閱2類似 哦,作為一個字符串,數組, 即使它真的 - 他們非常不同的事情, 但你可以把他們大同小異。 因此,原來,這條線實際上是 - 我們不需要做任何轉換, 而事實上, 這實際上是不是一個有效的表達, 這是我們的編譯器是在告訴我們什麼。 它說:“嘿,它預計的表達, 我來到這裡是這不是一個表達的東西。“ 聲明一個數組, 所有你需要做的是用分號這樣的事情, 然後你告訴陣列多久,你希望它是, 如5,所以這一行10 聲明一個數組,叫我5個整數。 這是一個的一邊,這是沒有必要的代碼, 但是,這是 - 這是一種什麼樣的聲明看起來像。 >>你會不會使用char我的strlen()]? CHAR I的strlen()]? >>字符i,然後括號內的,strlen的()。 是啊,所以我們可以 - 我們能做到這一點, 這將宣布 - 這樣做什麼? >>我想聲明一個數組 的一樣 - 的 - 哦,你不需要我 - 哦, 是啊,你絕對不需要我。 你聲明一個字符數組 長度為S。 所以山姆說的是, 10號線 - 讓我把一些空間,所以我們可以在它與其餘孤立 - 這10行聲明一個數組 的字符,字符strlen()價值, 但我們其實需要我, 和的原因,我們需要的,我是因為我們需要為陣列的名稱; 否則,我們就沒有辦法在後面的代碼請參考陣列。 所以在這裡是數組名 和內部的長度。 這將為我們提供一個數組, 但是,這是 - 再次,這是一個聲明。 這不是一項任務,它不是初始化。 如果我們宣布這樣的數組, 其實也沒什麼的數組中的內容。 這只是垃圾 - 無論是在那裡。 像我們所說的, 我們其實並不需要做這種轉換, 因為我們已經可以把字符串s為一個數組。 我知道我們正在運行的時間有點長, 但我想真的很快得到這個for循環 並告訴你如何訪問數組中的單個字符, 因為這是我們的任務的關鍵。 然後,我們將讓你從那裡走。 所以在這裡,我們已經有了一個for循環 看起來差不多好了。 什麼不太幾乎沒有呢? What's - 什麼是不完全正確的循環嗎? >>不花括號? 沒有花括號,對於一個。 想確保我們身體的循環使用花括號。 哎呀,而不是方括號! 接下來的事情,我們需要做的,這個循環是什麼? 如果我嘗試運行它, 這個錯誤,我得到什麼? 我得到的所有這些錯誤 - 我必須初始化i。 大。 因此,這將是一個循環 - 這是沒有做到這一點, 但它真的很近。 我們現在可以運行此代碼, 建立,仍出現錯誤。 為什麼它仍然抱怨, 說表達的是未使用的, 這是因為該行不會做任何事情。 我們並沒有存儲在任何地方,我們並沒有將結果保存。 我們應該在哪裡保存這個結果呢? >> S或我呢? 沒錯,這個時髦的語法, 這個S的方括號 裝置進入的s的第i個字符。 這將是東西是真正重要的是分配。 不幸的是,我們將不得不停止在這裡, 所以,塞巴斯蒂安部分可以進來, 但我很高興留後外,並會採取任何問題。 所以,謝謝你們的到來。 現在應該上載,建立,運行。 我們可以輸入一個字符串,如“你好” 打印“中Qox”的。 [笑聲] 因此,不太有,但移動,獲得對這些循環! 謝謝你能來,我會在外面。