>> [音樂播放]
>> 國寶馬蘭所有權利。
歡迎回來。
這是CS50，這是 本週一，續。
因此，我們已經通過的原因之一 圍繞技術，如
谷歌玻璃是他們與 已知的東西作為一個API，
應用程序編程接口。
而這句話的意思是，隨著 正確的文件和用正確的
文檔，你其實可以寫 甚至這樣的設備的軟件。
>> 還等什麼，我們心裡有朝 學期結束，如果一個項目
涉及，也就是說，谷歌的玻璃可能 上訴時，我們會看到我們能做些什麼
掛鉤了一些 借用的硬件以及
公開訪問的API，這樣就可以 真正開始建立軟件
上運行的谷歌相同的玻璃。
>> 另一個設備，我們已經打了 後期，我們認為可能是
在學期結束的樂趣 這個小東西在這裡。
這就是所謂的大躍進運動，你是什麼 看到在技術上是一個
廣告設備，但它 不說這是什麼特別的
設備的能力。
，也配備了一個API通過 你可以寫軟件
控制自己的電腦的方式 挺喜歡這個一分鐘的電影在這裡。
>> [視頻回放]
>> [END視頻播放]
>> 所以現在，該裝置發生 被實現為一個小的USB
連接器，你可以插入到您的 電腦，但我不會感到驚訝，
如果用不了多久，我們有這些類型的 在下一批次的PC技術
和Mac電腦，這樣就可以，事實上， 與它交互
這樣的一個方式。
事實上，我想我會做，太， 我拉起一個小演示
程序，用這個軟件。
所以，我把小的傳感器 在我的筆記本電腦前。
>> 你可以看到，它已經實現 我手中有
控制它。
而這一切的應用程序確實是 順順噹噹的小事情是這樣的。
但是你可以看到，的確， 我有五個手指。
如果我們可以得到它做的所有10個， 你能想像一個整潔的鋼琴
應用程序或等。
所以，如果你想下課 今天和發揮，作為
好了，歡迎你。
所以朝學期結束。
>> 因此，一對夫婦的行政 公告。
一，辦節這個星期五 中午在cs60.net/section。
這個URL是在球場上的 主頁。
雖然，在此期間，supersections 將亮相這個星期天。
Supersections是一次性的事情， 因為它需要我們工作一段時間
是誰在這部分和。
>> 因此，這個星期天，將是一個 對於那些不舒服的部分，
那些一節 更舒適。
那些你在某處 之間，歡迎去
其中一個或兩個或兩者都不是。
這些都將被拍攝下來。
他們將在一個較大的觀眾席比 通常會一節的。
但是，這裡的目標是使你 一些安慰與問題設置，
用C，與CS50設備中，這 週末，甚至在你發現你的
正式部分分配。
所以，你會滿足您的TF和較小 在大約sectionmates組
一個星期的時間。
>> 辦公時間，同時， 已經持續了。
利用他們今晚或 明天晚上，如果你想。
習題集0，是因為上週五。
這一天遲 定期舉行的星期四。
但問題集1，你會看到 它包括一些熱身
演習你自己 可以擴展您的
週四截止至星期五。
習題集1，同時，將首次亮相 課程的網站上，這個未來
週五，如果你想蜷縮著 它，因為我從前一段時間晚
星期五晚上，在你的房間。
>> 所以cs50.net/appliance的地方 你可以得到CS50家電
上週一，我們開始使用。
我們將使用它今天多一點。
不過放心，問題設置1 規範將引導您完成
正是你所需要的步驟 得到啟動和運行。
所以不用擔心這樣做之前， 習題集1，如果你寧願不要。
>> 好的。
因此，我們期待在源代碼上週一， 但在一個新的上下文中
編程語言，即C.和C， 不像划痕，是不是圖形。
這不是拼圖碎片。
它更類似英語的語法。
有一對夫婦涉及的步驟 在實際編寫和運行
在C程序問題，因為除了源 這樣的代碼，你需要的東西
被稱為編譯器。
通俗地說，是什麼 編譯器為我們做什麼？
嗯。
>> 學生：它的代碼轉換 你寫的0和1。
>> 國寶馬蘭：好。
因此，它的代碼轉換 我們寫0和1。
所謂的源代碼轉換 目標代碼，其中後者看起來
有點這樣的事情。
這是你的CPU，大腦內部 你的電腦，因為
誰創造了這些計算機的人， 知道這些序列
0和1的平均值。
>> 也許這意味著打印。
也許這意味著除了。
也許這意味著減法。
也許這意味著顯示的圖形。
有預定義的位模式 世界已經決定意味著
某些事情。
但是，在這個過程中，大部分 我們將繼續努力在一個更高的水平，
我們會想當然地存在 比如編譯器，可以
使我們的源代碼功能 在路上，我們的打算。
>> 所以我們第一次寫程序上週 然後開始端口，從而達到
說話，到C過去的這個 週一，是這樣的。
當綠旗時，打招呼。
這是，當然 從頭開始寫的。
我聲稱，相當於 在C程序看起來有點
這樣的事情。
>> 所以，我一直以為我們起初做的是什麼， 讓我們梳理除了什麼樣子，在第一
誠然，一目了然，相當神秘 語法，但你會開始注意到
圖案相當快。
今天我們還會做的是提供 你的心理模型對一些
規範，一些標準結構 在編程。
然後我們將實際拿到手 臟以及一些例子。
>> 因此，對於那些你更舒適， 認識到這星期，然後下一個
本週很可能是有點。
但是，尤其是當黑客版 問題集1熄滅
當然網站上週五，我認為 你會發現，即使你填寫
在未來的兩個星期的一些空白， 你會開始得到越來越
挑戰和遇到 新的，新的東西。
>> 因此，讓我們逗這個程序除了 在一個時間的幾行。
在最高層，我們有什麼 技術上稱為
預處理指令。
這僅僅是一個說的代碼行 包括一個文件的內容，
稱為標準I / N標準輸入 - 對不起，標準I / O標準
輸入/輸出。小時，內部 我自己的計劃。
>> 因此，換句話說，如果我寫了這 用一個簡單的文本編輯器如計劃
gedit中，簡單的等同於 如Microsoft Word的東西，
指令的＃include stdio.h中，僅僅​​是 要告訴編譯器，搶
其他文件，stdio.h中的內容， 並將其粘貼在這裡。
>> 現在，為什麼我照顧？
什麼我們要求的是這個文件裡面 stdio.h中，這是存儲
我的硬盤驅動器上的某個地方，或在這種 的情況下，在CS50家電某處？
別人為我把它放在那裡。
但是，什麼是它嗎？
>> 是啊，所以這是一個宣言 一個函數調用printf的。
因此我們知道printf回憶的功能 顯示單詞和字符，
屏幕上的數字在我的招投標。
但我沒有把它寫。
CS50沒有把它寫。
有人幾年前寫的，他們 基本上給了我們幾招吧
在一個文件名為stdio.h中。
所以，第一行只是給了我訪問 功能，別人
幾年前寫的，其中 這是printf的。
>> 現在，下一行，我要揮揮 手，至少要等到下週。
但是現在，知道詮釋的主要（無效） 本質上相當於這
黃色的一塊拼圖時， 綠旗點擊。
這個世界，幾年前，決定，如果 你正在編寫一個程序
語言稱為C，你開始 您的程序行
看起來這樣。
在短短的一個星期的時間，它會讓 感int是什麼，什麼是無效的。
不過，現在才想起來 作為這個黃色的一塊拼圖。
>> 現在未來，我們有一個大括號其次 另一個接近大括號，
可以這麼說。
我們將看到這些整個 C程序，以及
JavaScript和PHP。
而這些只是封裝 相關的代碼行。
基本上是開放的大括號 說，這裡談到的一些代碼。
而封閉的大括號，這是 成一定的角度放置，在另一個方向上，只需
手段，它 相關的代碼。
>> 所以在此先多汁線 程序是最後的printf
報價引文結束，世界，你好。
我叫之間的事情 引號什麼最後一次？
因此，它是一個字符串。
一個字符串就是技術人員的 一個序列的術語
字，一個詞，一個短語。
即使是一個單一的字母 用雙引號。
但它是一個零序列 或多個字符。
>> 反斜杠-N，雖然，看起來 有點怪。
但它只是意味著什麼 簡單到計算機。
反斜杠-N是什麼？
新線。
所以，這只是特殊序列 世界已經決定的字符
手段在那裡，把換行符 因為編譯器實際上會得到
困惑，通常情況下，如果你很 可以理解，但不正確，只是
按下回車鍵把 新的生產線在你的代碼中。
你需要多一點 明確用反斜杠-N。
>> 我們會看到有等其他幾個 特殊字符的模式。
例如，如果你想要讓你的 介意漂移到一個角落的情況下，
假設，我想打印 在屏幕上的雙引號
不管什麼原因，似乎 是一個小問題，正確的嗎？
因為如果我把一個雙引號 “你好，世界的中間，”無論出於何種
原因，為什麼，似乎 潛在的問題？
它打破了字符串。
>> 編譯器只是一個程序。
像一個編譯器只是走一個程序 讀你的代碼從上到下，
左到右。
如果看到三雙引號，而不是 二，它是不會知道
如果你的意思是左的東西 應該是字符串，或東西
右，或整個事情。
這是含糊的，所以是一個典型的 編譯器會做的只是嚇壞了，
並給你一些錯誤信息， 讓你處理這個問題。
>> 所以反斜杠n表示新 行，你會有什麼本能
開始，如果你想包括 反常的東西像一個雙
引用裡面的其他報價 字符串？
反斜杠雙引號。
因此，我們會看到這個 一種模式。
>> 如果你想要做的東西一點點 奇怪了，你會發現，
解決方案往往遵循一個模式， 反斜線
表示一個轉義序列。
它只是意味著一些特別的東西 我們需要在代表
不同的方式。
至於你怎麼代表 一個反斜杠，好了，我們會
回來。
但得到的答复，也實際上是 有點明顯。
>> 現在讓我們介紹一些其他的 編程結構
你看到划痕。
您可能已經理所當然的 如果你已經已經潛入
問題設置為0。
但是，我們現在介紹的語法在C 這些原本相當直觀
的想法，它們中的至少一些。
>> 所以這個概念的條件或 的一個分支，而以前我們
代表了它與代碼看起來 像這種划痕左邊 -
如果x小於y，然後這樣說 -
而現在在C - 讓我磨練 在最簡單的情況下 -
我們只是說，如果打開 括號，什麼是真實的 -
布爾表達式是要去 我已經說過條件 -
密切括號，然後做什麼 那些大括號內。
>> 所以在這裡，太，大括號 有點像划痕
U形拼圖。
做這些大括號內。
在這種情況下，削減兇多吉少。
並注意到這是向前 斜線，而不是一個反斜杠。
斜杠，斜杠， 對於那些已經編程的人
之前，只是意味著 -
它只是一個評論。
註釋是不是一條線 代碼本身。
這是一個說你，一行英文 人，寫自己
也許是提醒你做某件事， 自己解釋，解釋
別人，你的代碼是做什麼。
這只是一個描述性的註釋。
>> 現在，當然，我們可以有一個雙向的 岔路口，僅僅通過這樣做，
三路岔路做 這一點，如果你繼續這樣
模式，你可以有四種方式， 五，六岔路，如果
的確，你需要處理， 有很多條件。
然後請注意這裡的並行 -
if（條件），否則，如果（條件）， 和只有一個，這是一個有點
奇怪的是，最後， 只是別人。
但是，這是相同的， 從概念上講，我們已經做了什麼
已經，儘管語法 需要一點點時間來適應。
>> 現在，在這個例子中，有 其他一些奇怪的語法。
我們再次看到printf的，開放的括號， 和緊密括號。
裡面有 帶引號的字符串。
括號，在上下文中 printf的，在左邊
和右是什麼？
什麼我們描述報價 更普遍的字符串？
>> 所以這是一個參數。
任何時候你有一個函數，如 printf的，然後一個開放的括號和
密切括號裡面的東西 它，無論它是一個字符串，或
整數，或其他任何東西，這件事 那些括號之間被稱為
的說法。
>> 和參數只是影響 函數的行為。
在這種情況下，這是很清楚。
x <y是什麼被傳遞， 可以這麼說，作為一個參數。
printf是要 打印正是這麼做的。
因為可以肯定，這個人多年前 printf的實現有沒有想法
我們人類的接班人 要使用printf。
所以這就是為什麼論據存在， 後功能的影響行為
被寫入。
>> 現在，布林表達。
我們已經看到了這些以前在划痕。
事實證明，在C，你也可以“或” 它們放在一起，可以這麼說。
兩條豎線意味著該塊 代碼，這樣做，
如果執行的第一個條件是真實的 第二個條件是真實的。
即使你可能沒有做 這划痕，確實可以
做到這一點划痕，而且還可以 表達自己的不同 -
如果所述第一條件和第二 條件是真實的，那麼做
花括號內。
>> 就像不談，它的原因是 一個雙符號和雙
豎線，我們最終會看到 一個單一的垂直酒吧和一個
單一符號實際上有不同的 在C中的意思所以現在，
那重複的符號 是故意的。
>> 因此，讓我們的介紹，簡單地說， 此位語法。
這並不完全結轉到 從頭開始，但我要求，我可以
如果別人實現的概念，如果 別的，如果是別的，如果else語句使用
一種叫做switch語句。
唯一的原因，這確實存在 只是給你，程序員，
稍微不同的方式解決一些 問題，儘管在邏輯上
不給你任何新的功能。
>> 我的意思是這一點。
當你說開關，然後一個空格， 然後一對括號，裡面
“表達 -
這可能是一個小非明顯 在第一，但是這不是一個參數，
從技術上說，因為開關 不是一個函數。
所以現在，假設我們正在使用 在不同的地方括號
不同的原因。
>> 因此，開關的表達意味著我可以 把一個變量裡面的那些
如果說表達括號。
然後，如果該變量 -
假設它被稱為X， 它僅僅是一個整數 -
然後我就可以在我的幻燈片列舉 在這裡，像這樣的東西。
如果x是我的變量，我 想要做的事，如果x
等於1，我可以做到這一點。
>> 如果我不是想要做的事 如果x是2，我可以做到這一點。
否則，如果我想做些別的事情 完全，我可以有一個默認的情況下，
這種情況下，我這樣做其他的事情。
因此，在這個意義上說，它是等效於一個 如果x等於等於1，否則，如果別的，
但我提到這一點，現在只是因為 我們會再次看到它。
但現在，只知道它的存在。
>> 好的。
因此，這些近一多一點 乍一看複雜，但他們
相當簡單的東西。
一個循環在C是一大塊的代碼， 少了點東西，
一遍又一遍。
唯一惱人的事情是 那就是它是一個有點神秘
來表達自己的這種週期性 圖案，但世界標準化
通過以下方式。
>> 當你使用一個for循環，你已經有了 再次一對括號。
並注意兩個分號 在那裡。
那兩個分號分開三 內部的不同的表達式
括號中。
一種是所謂的初始化。
一種是所謂的條件。
一種是所謂的更新。
>> 看著抽象，這是 完全非顯而易見的，所以讓我們來看看
一個具體的例子。
在划痕中，我們有一個重複塊。
此塊說，重複10次，說 “你好，世界”。讓我索賠
現在，我們會回來，和 這也將獲得更多的熟悉
過不了多久，等價的C 代碼可以說是這樣的 -
一個聲明和一個空格，一個對 括號中的分號，注意
有分開三個不同的 的東西，初始化
條件，而更新。
>> 並採取一種猜測是什麼 首先是做什麼。
INT I = 0。
粗糙通俗地說，是什麼 這樣做對我們來說，可能嗎？
所以，是的。
它聲明一個變量叫我， 它給什麼樣的價值？
0。
所以它創建一個變量 ，存儲在它的值為0。
這就是所謂的初始化。
>> 好吧，我現在聲稱前 這中間的東西，我
<10的條件。
那麼，什麼是做什麼？
那麼，什麼for循環做時， 一個for循環程序運行時，
每次電腦貫穿 這個循環中，從頂部至底部，頂部
底部，就像你們做的時候 計數自己坐了下來，
一遍又一遍， 電腦是怎麼回事
檢查條件。
而且，如果i小於10， 它會再次這樣做。
如果i小於10， 它會再次這樣做。
如果我是小於10， 它會再次這樣做。
所以，似乎表明 希望我改變。
否則，我們就會有一個無限循環。
事實上，我正在改變，因為 最後一件事，分號後有
是略帶神秘的i + +的語法。
但是那些你們誰已經這樣做 之前，這只是意味著
很簡單，是什麼？
>> 學生：[插入聲音]。
>> DAVID馬蘭：加1到i。
增加i。
於是，我們看到了一個刮拼圖 一塊，實際上。
它看起來並不像我+ +，但只是 手段很簡單，遞增
1的價值，我每一次這樣做。
所以，從字面上看，你開始 初始化i來0。
然後，您可以檢查你的病情。
0小於10？
是。
我們經過循環。
>> 接下來的事情，我要求電腦的 要做的是它會
增加i。
所以，我現在是1。
檢查條件。
是不到10 1？
當然。
所以做了一遍。
然後，它遞增i + 2。
2小於10？
是。
一遍又一遍。
最終，由於 加plussing的，我們得到i等於10。
10小於10？
嗯，顯然不是。
這就是在哪個點 for循環停止。
如果你有更多的代碼 屏幕下，電腦
運行該代碼，而不是收益。
>> 如此反复，即使這將 外觀和感覺有點怪
第一，當然對於那些你誰 從來沒有編程之前，
從字面上減少概念 否則一個非常
簡單的拼圖 刮片。
>> 好吧，我答應了，有好多 其他類似物從無到有。
有這一個了。
我們看到了這短暫的最後一次。
但要記住永遠 從頭阻止？
它只是做一些事情永遠不會消失？
我要求，你可以實現 此以這種方式。
實際上，你可以實現這個 在一堆不同的方式。
>> 但在while循環不同的僅僅是 在C的方式表達自己。
在一天結束的時候，你不能這樣做 任何一個while循環
不能用一個for循環。
因此，他們在結束的 天功能上是相同的。
但它可以讓你表達自己 有點不同於
通過以下方式。
>> while循環，這是什麼在 括號檢查了一遍，
一遍又一遍。
只要該表達式為假， 然後循環停止執行，
和計算機進到 運行任何其他代碼
有您的文件。
>> 但是，什麼是有趣的 我簡直輸入真。
和真正的是一種類型的布爾值， 真或假的值。
所以真正成為過 假的，如果我從字面上
硬編碼到我的程序嗎？
因此，沒有。
這是一個有些奇怪的是，我這樣做。
但是，真正的是真實的。
有沒有加plussing。
有沒有用在這裡的變量。
所以，因為我硬編碼，而真實的，這 循環總是要評估的
一遍又一遍。
>> 所以多少次“世界，你好 要打印在屏幕上？
永遠。
次，直到無限數量的 電池模具或其他一些外部
事件發生。
所以這可能不是最好的方案 寫的，因為如果用戶
永遠不能放棄你的程序，這是 可能不是你所希望的。
>> 但有時，程序應該 有一個無限循環。
例如，如果您的電腦有 時鐘就可以了，它肯定會
不錯，如果你的時鐘不斷更新 本身永遠，儘管一次
第二次或一次一分鐘 類似的東西。
因此，即使無限循環 的確有其地位。
>> 好的。
最後，這一個。
而這一次有點不同 功能，我們會回來到
這大概Pset中1。
但還有另一種類型的循環 稱為do while循環。
而之間唯一的區別就在這裡 while循環，也就是說，一個while循環，
是，檢查條件的不 之前執行的代碼，但後
你執行的代碼。
因此，在最上方的一段時間 循環，而做的，而
檢查它的底部。
>> 而這只是意味著，在while循環 通常會執行多次
或更少的時間比一個while循環？
可能需要更多的時間，因為一做 而循環顯然是說這樣做，
其中後，才點你檢查 如果條件裡面的
括號中是真實的。
>> 因此，我們將再次看到這 大概在習題集1。
如果你想要做的事在 至少一次，那麼也許更多一些
倍，這是一個很好的 構建使用。
但一個while循環，與此相反，將 首先檢查其狀況。
這就是它在C循環， 同時，while和for循環。
再次，它們映射相當好聽回 從無到有，除了這一個不
相同的模擬相當有划痕。
>> 那麼，怎麼樣，現在，變量？
所以，這是怎麼了，我聲明了一個變量 語法的一天。
我有一個int，我認領 是一個整數。
然後，我有一個變量稱為計數器， 然後一個分號。
那麼，什麼是做這行代碼？
這是很簡單，宣告 一個變量 -
即，要求計算機，給我 一些內存，給我點位 -
我可以存儲是什麼？
一個int。
和分號只是意味著 代碼行結束。
>> 現在，第二行是可能 相當猜測的。
什麼是反= 0;在做什麼？
它的分配0反擊。
所以這是另外一件事 這是一個有點惱人
銀兩，說，代數。
而在代數中，等號意味著 ，在這裡等於C，等於
標誌意味著分配。
因此，這意味著在右邊放什麼 成什麼在左邊。
我們將看到另一種象徵，等於 等於，當我們要實際測試
質量，有些煩人。
>> 但是，這是一個有點低效。
這是一種煩人的，我有 聲明一個變量並
然後給它一個值。
所以C實際上讓我們簡化這 只是做一次全部。
你可以聲明變量 在左邊。
您仍然可以在做作業 把那個等號權
中間。
因此，在一天結束時，這兩個 相當於，但是這一次，坦率地說，
可能是更好的習慣進入 只是因為它是有點少
代碼，這是一個有點容易閱讀， 它只是收緊
你的代碼，可以這麼說。
>> 有任何疑問迄今循環， 變量，條件，
布爾值，無論是從技術上 或概念呢？
好的。
所以，現在這個下一個得到 更有趣一點。
這是例子我把去年 時間，只是一個划痕的例子映射
超過三
>> 因此，一個函數。
通俗地說，有什麼功能？
得到了大膽的與你的答案。
有什麼功能？
>> 學生：請問東西。
>> DAVID馬蘭：那是什麼？
>> 學生：請問東西。
>> 國寶MALAN：有些事情。
確定。
我們就從這裡開始。
因此，一個功能做一些事情。
所以這是一塊代碼 基本上其他地方實施
的確東西。
現在，有什麼有趣的功能 是，它可以採用輸入，
，並且可以產生輸出。
，讓我們採取實際 看看這個。
>> 因此，該名男子背後的窗簾 剛才是故意的。
在這裡，我們有一個表。
但是，假如這實際上 代表一個大箱子。
所以這是一個所謂的黑盒。
而在一般情況下，在設計上，在計算機 科學，黑盒只是參考
件的功能，有人 已經落實，你不這樣做
不一定知道或不關心它是如何 引擎蓋下實施。
你只關心這個黑盒子， 現在我們將開始調用
功能，做一些事情。
>> 所以，舉例來說，如果這個黑色的框 這裡的舞台printf的代表，
功能，我知道，從前面的例子 printf的需要的一個或多個
參數，並在最前面的那 論點應該是一個字符串，如
“你好，世界”。好吧，如果我這個人 編寫程序，我想
用printf，以我來說，不妨 這裡需要一張白紙和一個
黑色標記，並寫上 -
我拼錯了“世界” -
H-E-L-L-O。
>> 所以，我帶你去我的黑色標記，我會 寫的，又大又清楚，我可以
這張紙，“你好，世界” 現在我要求，這是我的觀點。
這是一個字符串，代表 一塊白紙。
和我現在輸入功能 printf是會是這樣。
所以我調用printf，路過 這樣的說法作為它的輸入。
>> 而現在，我不知道怎樣的人誰 寫到printf的做了幾年前，但
我知道其文檔 在生活中，其目的是打印我
作為輸入提供給它。
於是，儘管本實施 我並不知道
引擎蓋下，現在 哦，我明白了，是做。
印刷的東西 在屏幕上。
和控制的程序，如果有 多行代碼，
現在已經歸還給我。
等的事實，科爾頓 -
保佑他的心，躲在這裡， 一個表在大家面前 -
是故意的，我不知道 我不在乎的printf
實施。
我只知道，再從它的 文檔，它做什麼，我怎麼
我應該使用它。
>> 現在，記得printf的能拿 更複雜一點。
同樣，我們只是在談論 相當於划痕的言論塊。
但我也做了這最後的時間。
我想，以我的hello程序一 更加動感一點，不只是硬
代碼的東西，如“世界” 絕對不是硬代碼的東西
任意像D-A-V-I-D 到程序中。
我想問問他或她的用戶 名稱，然後做一些與
該字符串，他們提供的。
>> 因此，有一點不同的東西 在這裡。 printf的，剛才，
確實，做一些事情，但它 不返回任何東西給我。
對嗎？
科爾頓沒有手我什麼 回，沒有一張紙。
只是有一個副作用。
我提供的“你好，世界”為 參數科爾頓導致
副作用的詞語，一些詞語， 出現在屏幕上。
>> GetString的，雖然是一點點 不同的。 GetString的也是一個
功能，但它會返回一些值。
它不只是有一個 審美的副作用。
實際上，它給我的人 打電話或使用的功能，
東西回來。
因此，在這種情況下是，GetString 調用GetString的開放
括號，括號密切。
是否GetString的，因此，應採取 任何參數或輸入？
不，它似乎沒有。
其目的在生活中是 只是為了得到一個字符串。
它需要比沒有更多的細節。
因此，讓我去，假裝， 再次，這個黑盒子是不是printf的，
但GetString的，讓我，人 寫這個程序，調用或使用
只是寫的GetString G-E-T-S-T-R-I-N-G，開括號，靠近
括號是，GetString。
>> 現在，我不知道如何CS50員工 實施GetString的，但我知道，
如果我等待足夠長的時間，它會做 引擎蓋下的東西，也許使用
一些變量，可能使用一些 條件下，可能使用一些循環，
也許使用某些功能， 也許使用 -
只是想擺攤 - 也許使用 其他一些編程功能。
但是，如果我等待足夠長的時間 - 在現實中， 在計算機中，發生這種情況
超級快 -
如果我等待足夠長的時間，這個功能 ，GetString的是要得到一個字符串
來自用戶的，大概鍵入 鍵盤上，
然後，當你的GetString越來越 從用戶的那些字符
並將其存儲到一個字符串， 功能是，GetString，將不得不
一些輸出，我為我準備好 要檢索的方式
賦值運算符。
>> 如果我去的，的確，到輸出 在這裡，Obosi慷慨
參加了，不知道這個 前進，他的名字寫入到這個
變量，它是代表 一個字符串。
現在，賦值運算符表示，即使 雖然這可能會感到有點
多餘的，其實，我做的需要 讓我自己的副本。
由於在左手 側 - 哎呦！ -
注意到，我基本上有字符串 命名左側。
所以，我也要去 我自己的副本。
這是一個有點白色的謊言， 因為我們會看到一兩個星期的
時間的字符串實際上是不 他們似乎是什麼。
>> 但現在，這裡的返回值。
這裡是我自己的副本後 使用賦值運算符。
而現在，我想下一步要做？
我們現在有第二個 兩行代碼。
所以我現在要調用printf。
讓我們假裝現在，黑 框又回來了被
printf和GetString的。
>> printf的這段時間要 拿多少個參數？
所以，看起來，它就像兩個。
有兩個逗號，在那裡，但 那些逗號，它是
裡面的引號。
所以第一個參數是從字面上 是這樣的。
H-E-L-L-O，逗號％ ，反斜杠-N。
現在我提供一個參數， 但兩個參數的printf。
>> 什麼樣的printf應該做的 這兩個輸入後，我把它們放入
作為參數？
它應該採取的第二個 他們，我把它叫做名稱，所以
我寫了第二張紙 剛才叫名字。
這將插頭裡面的值 該變量到佔位符，
％s，因此，只是一瞬間 時間的推移，我們將看到一個副作用
printf的調用，而現在我們 見不是“你好，世界”，但“你好，
obosi“。
>> 所以兩個又大又圓的掌聲 我們的志願者，只有一個人知道
這將發生。
好的。
所以，也許，因為這是簡單的， 當然，如果你已經熟悉
這樣的，希望你永遠不會 如何忘記，尤其是視覺
功能的工作。
>> 所以有更多的不僅僅是GetString的。
CS50庫裡面，有一個 一大堆的功能，所有這一切
只是做出明確予以資本化 我們寫了這些功能。
通常情況下，在C中，幾乎每一個其他 你會使用的功能是小寫。
但是，我們特意使用大寫字母 顯然，這些只是為了讓
是，我們將各種訓練車輪 用短短的幾個星期，
簡化的過程中獲得 來自用戶的輸入。
>> CS50庫不會做任何事情 你們不能做
只是從使用C代碼 老校友教材。
但是，再次，我們使用它們作為訓練 只是一對夫婦的各種車輪
，週這樣我們就可以擺脫了 複雜性，你很快就會明白
自己做的事情為 相對越來越簡單
來自用戶的輸入。
>> 所以，知道你將有機會獲得 的GETCHAR，GetDouble -
翻一番。
的消閒節目 - 然後getFloat先把。
什麼是浮動？
我們從這裡開始。
>> 學生：[聽不清]。
>> DAVID馬蘭：是啊。
這是一個帶小數點。
因此，而一個int是一個整數，該 僅僅是一個數字0到9，
一些重複的次數，其 是一個浮動
小數點。
雙，同時，也是一個 一些帶有小數點，但更
小數點後的數字 點，有可能。
>> 所以我們會得到回此之前長。
但通常情況下，這些類型的 數據，這些類型的變量
像我們這樣的一個庫，可以返回到 你，用不同數量的位
存儲信息。
通常情況下，煤焦，這只是意味著 一個字符，使用8位。
這實際上是符合我們 字節志願者上週
走上前來，代表一 ASCII字符的時間。
因此char是8位。
>> 一個浮動的恰好是 ，通常為32位。
和雙，您可能已經猜到，是 實際上是64位，這是只是更多的，
這意味著你可以有更大的 數字或更精確。
但同樣，在另一個時間。
GetLongLong，同時，雖然愚蠢 而得名，是真的只是一個
整數的兩倍大，兩倍 長，潛在的，作為一個普通的
整數，64位，而不是32。
和GetString我們一直在使用。
>> 但事實證明，在CS50庫， 這是實施，正如我們所看到的，在
這兩個文件的形式，其中一個 被稱為cs50.h，還有兩個
在它的數據類型。
C.您可以布爾值中不存在 模擬他們只是用0和1
整個節目。
但是，我們在創建CS50庫 符號“真”和“假”
代表1和0讓你不 有硬編碼的東西
從字面上像1和0。
但是，我們將再次看到那些。
>> 的字符串，也不存在。
這就是為什麼我提到這是 一點點善意的謊言現在。
但我們會剝開， 沒過多久層。
但現在，一個字符串是一個 字符序列。
>> 同時，在C，你確實 有不同的數據類型。
請注意這些都是小寫的。
所以的功能，你剛才也看到了 CS50，寫的函數
你將返回到值下降 到這些類別之一。
>> 一對夫婦小抄只是種植 這裡的種子。 printf的不只是
％S用作佔位符。
％d為十進制整數， 或％，我會正常工作。
％f是浮點值。 ％c是 一個字符，如果你只想堵塞
字符到一個預先格式化字符串 就像我們一直在做的，你可以使用％C。
>> 然後，有些煩人，LLD 很長很長的十進制整數，
這意味著，如果你需要一個真正的 大的數字，你正在使用的東西
所謂很長很長，我們還會回來的 回在pset中，您可以使用％LLD
告訴printf的，插上一個真正的大 整數，在這裡通過其第二或
其他一些參數。
>> 最後，我答應了， 還有其他一些逃生
printf的支持序列。
我們已經看到反斜杠-N。
反斜杠-R，您可能會看到。
這是一個老派的東西。
如果您使用過一個真正的打字機年 以前，你拉在曲柄
這不僅旋轉的車輪 移動陣容，也感動了
整個事情的所有的方式回到到 左，反斜杠-R
本質上移動光標回 開始線
沒有向下移動。
但同樣，更多的， 也許在將來。
>> 反斜杠反斜杠報價，雙引號， 反斜杠反斜杠是
解決小小的謎語 我前面提到的。
反斜杠0實際上是 挺有意思的。
但是，我們會回來 用不了多久。
>> 因此，讓我進入，如今，CS50 家電，讓我們真正做到一個
快速升溫的例子之一 我們已經沒有，然後移動到
稍微複雜一些的東西。
所以，如果我打開了我的程序 gedit的 -
這是我的圖形編輯器。
我可以做到這一點 -
讓我關閉該窗口 -
此圖標的方式在這裡， gedit中，在左下角
菜單旁邊的角落。
>> 我要繼續前進，前進， 保存這個例子，說，約翰
哈佛的文件夾。
約翰·哈佛的文件夾就是他的家 住在他的所有文件目錄
默認情況下。
我要保存為 一個名為HELLO 0.C。
而且我選擇了這個名字，只是如此 線與示例代碼
當然的網站，並在 YouTube的在線視頻。
>> 所以，現在我要開始 寫我的第一個程序。
讓我放大可讀性。
而且我要繼續前進並說詮釋 主要無效，就像
黃一塊拼圖 啟動程序。
我已經得到了成習慣 多年來，然後打開我的花括號
同時也關閉它，然後回去 我希望把我的代碼，只需
因為它幫助我保持一切 平衡，尤其是我
程序變長。
>> 而現在，在這裡，我要繼續前進 說的是printf，報價引文結束，
你好世界，反斜杠-N，密切報價， 接近括號，分號。
所以，我只是重複我們的一切 被授予迄今為止的。
現在，我要以縮小。
>> 這個終端窗口在這裡， 我可以做這個黑色
和白色的窗口？
我可以用它來做什麼？
所以這是我運行命令和 在這裡我可以編譯的東西。
我要保持它的簡單。
我要使用一個程序 名為make，這是不
技術上是一個編譯器。
編譯器的稱為鐺，但 我們會回來，在一個
一周或2的時間。
>> 現在，我只是輸入make HELLO-0，但那些誰
比較我剛才在你們心中 輸入我應該輸入什麼可
已經知道，我做了 錯誤的東西在這裡。
現在，顯然有一些錯誤。
之前，我連看都不看他們是什麼，任何 的想法，因為我做錯了什麼？
>> 學生：[插入聲音]。
>> DAVID馬蘭：是啊。
我缺少庫的頭文件。
這些文件被稱為頭 文件，和他們共同
屬於東西叫做庫。
圖書館只是大塊的代碼 其他人寫的。
因此，標準的[？我？]庫是一個 收集包含代碼的文件
其他人寫的。
>> 所以我失踪了。
那麼，為什麼我得到一個錯誤？
好吧，讓我回來在滾動 我的終端窗口。
不幸的是，在C中，在很多 編程語言，特別是
如果它是所有新的給你，誤差 消息是精確的，但他們也
相當神秘。
和錯誤在這裡，在紅色， “隱式聲明的庫函數
printf輸出類型“，然後滾動 到下一行，“詮釋為const char *，
“這只是變得非常 很快鋪天蓋地。
>> 可是你應該開始做的，如果， 再次，新的這一切，只是為了
開始尋找關鍵字。
很顯然，我可能不明白一半 的話，我只是還沒有看到。
你會的，不過，在一個星期的時間。
但我看到的printf。
應該開始，用不了多久， 喚起你的記憶，所有的權利中，將printf。
用printf出事了。
我拼寫錯了呢？
不，它不是看起來像 - 哦。
我無法使用它，除非我教 編譯它的存在。
所以，再說一次，去自己的直覺， 即使你不真正了解
真正的錯誤訊息。
>> 的確，這裡的解決方案是只 包含在該文件的頂部
這樣，我的文件重新保存 控制-S或“文件”菜單上。
如果我現在回到這裡， 我要及時清除。
控制-L是一個不錯的方式 清除屏幕。
然後我要輸入“你好 0“輸入，現在我還是看到了
隱秘的符號序列，但 我們會回來的。
那是什麼使為你做的。
服用過程自動化 涉及相當惱人的命令
鏘，實際的編譯器。
但事實證明，我沒有錯誤 這件事情應該工作。
>> 所以，我現在要做的事情 - 讓我再次放大 -
./hello-0輸入，而事實上，我看到 “你好，世界”。現在讓我們增強
這只是非常輕微複製 步驟，我們打算。
我要重新命名此 另存為hello1.c。
現在我要聲明一個變量 叫名字，所以字符串名稱，
我打算把它 值報價引文結束
D-A-V-I-D收盤報價分號。
現在我要更換“世界” 什麼佔位符的字符串？
％S。
>> 而現在，許多參數應該如何 printf的利用這個時間嗎？
所以兩個。
所以，我去外面的引號。
我鍵入“名稱”後的逗號。
但我已經做了一些 別人錯了，這時候。
但是，讓我們假設，我沒有 尚未實現。
讓我上去此處。
>> 通知過，我開始有點 無聊的打字打招呼“0”
時間，“使”，而這一切。
所以，事實證明，在萊納斯你可以 經常打的向上箭頭您
鍵盤，實際上，你可以滾動 我通過所有的命令
執行早先剛才。
所以，如果我這樣做了，起床了， 有打招呼0。
我不希望出現這種情況。
我只是想改變這種狀況 你好1，回車。
最後，將 為您節省一些時間。
>> 好的。
不幸的是，有一個錯誤。
因此，讓我向上滾動。
這看起來像我真的 宰了這個節目。
我的意思是，我的上帝，這是兩行代碼， 10行的錯誤。
不過看在頂一個先。
使用未聲明的標識符字符串。
我的意思是標準I N？
不，我沒有。
我的意思是字符串。
>> 但如果是字符串變量 聲明的類型，DD我們說？
因此，它是在CS50圖書館。
因此，它是不夠的，在這些第一 幾個星期，只是使用
什麼C給我們。
我也要去這裡，我 可以把它的上方或下方，但我會
只要保持它的英文字母 保持有序的事情。
我要去包括cs50.h， 這是預先安裝的
你的CS50家電。
而且它是開源的，所以即使人 在互聯網上可以使用他們的
自己的電腦。
不過，來自與CS50家電。
>> 所以，現在讓我回去，並重新編譯 這與讓您好1。
該死的。
還有一個錯誤。
讓我向上滾動到第一，雖然。
這是一個有點複雜的。
多字字符常量。
這不是我的幫助。
但是請注意，鐺至少有一點 有點體面的，一點點
綠色插入符號的象徵，它的說法 這裡是我搞砸了。
為什麼會指著那個小 綠色箭頭，旁邊的單引號
我的名字嗎？
>> 因此，這是您剛才的事情之一 習慣了，尤其是如果你已經
在Python或JavaScript編程， 或其他語言，這個細節
不要緊。
在C語言中，它的問題。
如果你聲明一個字符串，它是 在一個序列中的0個或更多個字符，
你實際上必須用雙引號。
所以，我確實需要改回 開報價，收報價，
雙引號。
單引號做有他們的地方，但 只有當你使用個人
個字符，但更多的，另一個時間。
就目前而言，雙引號 是必要的。
>> 所以，現在，讓我回到我的終端 窗口，您好1。
誰的信心？
這是程序現在 正確編譯？
確定。
所以我們三個人認為這。
好的。
回車鍵。
它實際上做到了。
因此，有沒有錯誤，這個時候，即使 雖然這個方案得到位
更為複雜。
如果我現在做的點斜線打招呼1，回車， 它會說“你好，戴維。”
>> 但是，讓我們做第三次迭代 這一點，其中的
程序是真正的動態。
讓我繼續前進，更改文件 名稱，只是為了與一致性
你就必須提供的文件 你後來在網上。
回車鍵。
現在我要去和 存儲“大衛”硬編碼。
我能做些什麼，很簡單地 提高這個程序？
>> 我可以打電話的getString。
這可能是一個小的非顯而易見的是什麼 即將發生的事情，所以我要去
實際添加另一條線路中，將printf 並說名，冒號，引號，只是
提示給用戶 在屏幕上。
現在我要去這裡，我 要使用我的鍵盤快捷鍵。
我要去UP，UP和更改 您好1至2個招呼，回車。
令人欣慰的是，我在進步。
>> 現在我要去 點斜線打招呼，
改變，2，回車。
現在我的計劃 -
我會放大 - 越來越 漂亮一點。
名稱將是，讓我們說，羅布 這個時候，輸入，你好，羅布。
我們可以再次做到這一點。
名稱，勞倫，回車。
名稱，約瑟夫，回車。
名稱，讓我們嘗試 困難，回車。
誒。
這不是一個真正的錯誤。
所以它只是一個有點難看。
因此，也許我們可以解決這個問題 在未來，而不是現在。
>> 但如何將你本能地 去解決
那個特殊的挑戰？
它只是看起來愚蠢的。
你如何避免的事情 尋找愚蠢嗎？
因此，我們可以這樣做，OK，我聽到一對夫婦 的事情，條件和循環。
我們可以使用一個條件，要檢查 字符串的長度是什麼
用戶給我們嗎？
如果它是0，它只是引述引文結束， 他們只投中，然後輸入
也許我應該大聲喝斥 並促使他們再次。
但如何做一個提示嗎？
嗯，我也聽到了循環，然後我就可以 再這樣做一遍又一遍
提示用戶同樣的事情。
>> 好吧，讓我們做一個其他的例子 使用不同的
功能在CS50庫。
讓我關閉這個文件。
讓我創建一個新的。
我會打電話給它adder.c，只是因為 它很容易做簡單的算術題，
即使這將完全 給人留下深刻印象的，你可以做什麼
任何現代電腦。
>> 不過，讓我繼續前進，現在 -
我吸取了教訓最後一次 - 包括 cs50.h，包括stdio.h中，INT
主要無效，現在，我只是 盲目的信仰，但我們假設
將了解 這意味著在不久的。
我要說點什麼 像“給我一個int。”
>> 而現在，我如何獲得一個int？
我想最終聲明一個變量 名為x int類型
存儲在它的用戶之間的一個整數。
所以這是一口。
但是，如果有人想提出，如何 我聲明一個整型名為x？
詮釋X。
>> 所以，這真的就是這麼簡單。
給我一個int。
x。
現在，我使用賦值運算符。
我如何從存儲 離開的用戶的值？
我不想調用的getString 很明顯，而是調用getInt。
任何參數？
號
所以它是開放的括號，靠近括號 立刻，並且然後
分號結束就行了。
>> 現在讓我再次做到這一點。
給我另一種詮釋。
這一次，我會做詮釋，讓我們 叫它Y，等於調用getInt。
現在讓我做些事情超簡單 像一些數學。
所以printf的％D的總和 類型為int的佔位符。
％D，期間，反斜杠-N。
>> 好的。
所以這不是真正的數學。
但是，如果我想說的總和 價值加上這個值等於這個
其他值，進多少個參數 總，我應該給printf的，
最終呢？
所以四，對不對？
此字符串，然後這三個值。
因此，x是第一個，我想成為 插在％D第一。
y是會成為下一個。
>> 現在我想說的 z以及Z不存在。
但是，這並不是什麼大不了的。
因為本能，你會做什麼， 特別是如果你有一個
圖形計算器，你怎麼輸入？
X加Y如何？
因此，它不是一個實際的變量。
這只是兩個的總和 其他變量。
這是完全合法的。
Ç當然明白簡單 像這樣的算術。
>> 分號，保存。
現在讓我去這裡， 輸入加法器，輸入。
沒有錯誤，所以這是太進步。
輸入加法器。
與另一個鍵盤快捷鍵， 如果你開始感到厭倦
與所有的命令 -
如果你開始鍵入一個命令，像點 削減廣告，而這也正是你的
無聊踢，你通常可以打 Tab鍵計算機完成
休息的那句，如果它不 曖昧的，以後要來的廣告。
>> 因此，讓我現在繼續 你按一下回車鍵。
給我一個int，1，2， 令人欣慰的是，它的3。
但一如既往，測試計劃 不應該減少
只是嘗試一次。
讓我嘗試一個角落的情況下，像負 1，給1，有
檢查為好。
我可能要多做一些 嚴格的測試，但我敢
舒適，這是哪裡。
>> 好了，現在讓我們嘗試另一個程序 這一次使用一個
位的其他語法。
讓我創建一個新的文件。
我會打電話給排隊conditions0.c 了網上一些示例代碼。
讓我繼續做 包括cs50.h，包括
stdio.h中，在主無效 -
確定。
我們去那裡。
我們有我們的標準樣板。
>> 而這個時候我會說的printf “我想請一個int”，只是為了
的提示一點點 更友好。
現在我要得到一個 int的來自用戶的。
我要打電話n這個時間，只是 因為n聽起來像數。
調用getInt，而現在，做什麼 我想用它做什麼？
好吧，如果n是 - 我會放大 -
如果n是大於0的，我想 做到以下幾點 -
printf的“你挑了個正數。” 否則，我要輸入的printf“
挑了負
號碼“。所有權利。
所以這個程序，即使我做到了 速度快，看起來正確的語法。
讓我試試這個。
條件0。
似乎運行。
，輸入條件0。
讓我們給它一個int 50。
我拿起一個正數。
讓我們嘗試了一遍。
條件0。
負50。
我挑了負數。
>> 但現在，讓我挑什麼，我們將保持 調用一個角落的情況下，這是更
一個有趣的案例，你認為 可能會給你一些麻煩，0。
現在，我敢肯定，這是一個 那些角落零的情況下，
既不是正面或負面，所以我 程序，但在語法上
糾正 - 它編譯，運行 - 邏輯上是不正確的。
那麼，有什麼簡單的修復在這裡，如果我想 檢測，如果我想要來處理n
分別等於0？
>> 因此，如果n等於0，那麼我想說 如printf的東西“，你選0。”
讓我試試這個。
讓我回到這裡，清除 我的窗口，並重新編譯。
嗯。
產生一個錯誤。
但我要檢查 如果n等於0。
>> 如此反复，另一個愚蠢的事 習慣於等號
賦值運算符。
因此，這其實是錯誤的， 在技​​術上，即使編譯器
保護我自己，我們會 在技​​術上被複製成n 0
是不是我想要的。
我想測試平等 等於平等。
所以，現在可能是 我的更好的解決方案。
>> 讓我重新保存，也就是說， 條件下，新的和改進的。
所以，現在如果我重新編譯， 它將使條件 -
哎呦 - 條件下點斜線 條件1，回車，“我想一個int
請。“我要去 並鍵入50。
這還是不錯的。
50負，還是不錯的。
0，並且，事實上，檢測 我拿起0。
>> 所以，什麼我現在做的與此有關嗎？
好了，我們當然可以做的越來越多 複雜的事情。
但我想提出的是 我們結束這說明在這裡。
如果我們拉起這個，你會看到，也許， 你最喜愛的卡通
直到今天，你可能會 從來沒有理解。
而這是關於質量的笑聲 你應該得到與CS的笑話。
所以這是對的。
>> 但更令人信服的是，我想我會 給我們一點週一傳情。
因此，我們已經開始使用整數。
我們已經提到彩車。
我們甚至被稱為雙打， 再次，給你的數字
小數點後。
>> 但事實證明，花車和 雙打，真的，電腦，
從根本上說，不能表達 正是一些值。
我們知道，從數學課，你可以 後有任何數量的數字
小數點。
你甚至可以把豎線 說這些永遠持續下去。
>> 不幸的是，你不能真正 這樣做，在一台計算機。
所以角情況下出現的。
舉例來說，假設你 做財務的東西。
你做數學 用百分比和
與美元和美分。
和那些仙不 一定排隊。
嗯，事實證明，分數 便士可以開始添加時
與計算機系統建模 在這樣一種方式，聰明
人類可以利用。
>> 而那些你沒有見過的人，我會 想給你一個30秒的傳情
精彩的電影，被稱為辦公空間， 畫了一幅
我們要解決的問題 在週一的第一件事。
如果我們能夠提高音量 一點點，我給你30
秒的辦公空間。
>> [視頻回放]
>> 我的意思是，你，你沒有一直呈現 起來，你會得到你的工作保持。
>> 其實，我被晉升。
>> 我可以編寫一個病毒，最好 RIP關閉大的時候那個地方。
>> 那麼，它是如何工作的？
>> 每次有銀行交易 在計算利息，並有
成千上萬一天，電腦結束 與這些不足一仙。
>> 但我不會 做任何違法的事。
>> 非法？
薩米爾，這是美國。
>> 我們必須向上帝發誓。
>> 如果沒有人知道這 但我們，好嗎？
沒有家人，沒有 女朋友，沒有人。
>> 當然。
>> 商定。
>> - 別擔心，男人。
我不會告訴任何人。
>> [END視頻播放]
>> 國寶馬蘭：所以這個的話，是CS50， 這是辦公空間，它都將
使意義上週一。
到時候見。
>> 旁白：在接下來的CS50，羅布 調整被關閉的
哈佛膳食計劃。