>> [音樂]
>> DAVID J. MALAN：好的。
這是CS50這 2週的開始。
你會記得，在 在過去的幾個星期，
我們已經引進電腦 科學和，反過來，編程。
>> 我們依路開始的故事 從無到有，即圖形語言
來自麻省理工學院媒體實驗室。
然後最近一段時間， 上週，我們什麼
引入higher--一 較低級別的語言已知
如C，一些純粹的文字。
而且，事實上，我們最後一次 該範圍內探討
一些概念。
>> 這一點，回憶，是非常 第一個節目，我們看著。
而這個程序很簡單， 打印出來，“你好，世界”。
但有這麼多 似乎魔術回事。
有此#include 這些尖括號。
有int類型。
有（無效）。
有括號，大括號， 分號，和這麼多。
>> 所以，記得 我們推出划痕
這樣我們就可以，理想情況下，看過去 該語法，那真的不是東西
所有的理智 有趣的，但早
是的，絕對的，有點棘手 來包裝你的頭腦周圍。
而且，事實上，最常見的一種 事情早在編程類，
特別是對於那些不太 舒適，是讓被挫敗
並絆倒了某些語法 錯誤，更不用說邏輯錯誤。
所以我們的目標之一 今天，居然會
與某些裝備你 解決問題的技巧如何
更好地解決自己的問題 在調試的形式。
你會記得，這才明白， 我們引入了環境
最後一次被稱為CS50 IDE。
這是基於網絡的軟件是 讓你在雲中進行編程​​，
可以這麼說，同時保持你的所有 文件一起，為我們再次將在今天。
而記得，我們 在這裡重溫這些話題，
其中的功能，以及環路，並 變量和布爾表達式，
和條件。
而實際上多了一些，我們 從頭開始的世界翻譯
到C的世界
>> 但根本建設 塊，可以這麼說，
真的還是上週相同。
實際上，我們真的只是有一個 不同的拼圖，如果你願意。
而不是紫色的 保存塊，而不是我們
已經printf的，這是 這個功能在C，它
允許您打印的東西 並格式化在屏幕上。
我們推出了CS50 圖書館，在那裡你
現在在您的處置GET_CHAR， 和get_int和get_string，
和其他一些功能 好了，通過它你可以輸入
從用戶自己的鍵盤。
我們也看了看東西 像these-布爾和char，
和雙，浮法， INT，long_long字符串。
還有的在C.甚至其他數據類型
>> 換句話說，當你聲明 一個變量來存儲一定的價值，
或者當你實現一個功能 返回一定的價值，
您可以指定哪些 類型的值即是。
它是一個字符串，如 字符序列？
它是一個數字，如一個整數？
它是一個浮點 值，等等？
因此，在C，不像劃傷，我們實際上 開始指定什麼樣的數據
我們正在返回或使用。
>> 但是，當然，我們也遇到了 計算的一些基本限制。
並且特別地， 這種語言C，召回
我們看一看在 整數溢出，現實
如果你只有一個 內存數量有限
或者，具體而言，有限數量的 位的，你只能算這麼高。
因此，我們看這個例子在這裡 因此在飛機上的計數器，
實際上，如果運行時間足夠長會 溢出，並導致一個軟件
一個實際的物理潛在錯誤。
>> 我們也看了浮動 點不精確，現實
僅與有限數量的 位，無論是32還是64，
你只能指定如此多的號碼 後一個小數點，之後你
開始變得不精確。
因此，例如，三分之一的 世界在這裡，在我們人類世界，
我們知道僅僅是一個無限多 小數點後3秒。
但一台電腦可不一定 表示數字無限數量
如果只允許它的一些 有限數量的信息。
>> 所以，我們不僅裝備你 在條款更大的權力
你會如何表達自己的 鍵盤編程方面，
我們還限制什麼 你實際上可以做。
事實上，錯誤和錯誤會 從這些類型的問題的出現​​。
事實上，在主題中今天 要像調試主題
實際上看引擎蓋下 在上週的事情是如何介紹
實際上實施 讓你更好
了解兩者的能力和 如C語言的限制
>> 而事實上，我們將剝開層層 最簡單的數據結構，
一種叫做陣列，它 划痕發生所謂的“清單”。
這是一個有點 在這方面有所不同。
然後，我們還將介紹之一 首先我們特定領域的問題
在CS50，世界 加密，加擾的藝術
或加密信息，以便 您可以發送秘密信息
和解碼秘密信息 兩個人，A和B之間
>> 所以，我們之前的過渡 那個新的世界，
讓我們嘗試一些裝備你 技術，使用它可以消除
或減少至少一些 坎坷的
你可能已經遇到過 僅在過去的一周。
事實上，在你前面的such--一些 在C和賠率你的第一個問題是，
如果你像我一樣，在第一時間 您嘗試鍵入一個方案，
即使你認為邏輯 該方案是非常簡單的，
你很可能會碰了壁，並 編譯器是不會合作。
製作或鏘不會 真正做您的出價。
>> 而為什麼會這樣呢？
好吧，讓我們來看看， 也許，一個簡單的程序。
我要繼續前進，它保存在 故意叫buggy0.c文件，
因為我知道它要 提前缺陷。
不過，我可能沒有意識到，如果這 是在第一或第二或第三程序
這實際上，我讓自己。
所以我要繼續前進， 打出來，主要INT（無效）。
然後我裡面的花括號， 一個非常熟悉的（“你好，天下 -
反斜線，正“） - 和一個分號。
>> 我保存的文件。
現在，我要下去 我的終端窗口
並輸入make buggy0，因為，同樣， 該文件的今天的名稱是buggy0.c。
所以我鍵入make buggy0，回車。
>> 而且，哦，天哪，從最後一次召回 沒有錯誤消息是一件好事。
因此，沒有輸出是一件好事。
但在這裡我必須清楚地 一些數字錯誤。
>> 所以輸出的第一行 輸入make buggy0後，召回，
是鏘的相當詳細的輸出。
在底層， CS50 IDE配置
使用一大堆 與此編譯器選項
讓您不必 想想他們。
而這所有的第一線 裝置與鏘開始。
>> 但在此之後，該問題 開始讓自己的外表。
Buggy0.c上線3條，性格 5，有一個大的，紅色的錯誤。
那是什麼？
隱式聲明的庫函數 int型的（為const char *的printf，
...）[-Werror。
我的意思是，它非常快 變得很神秘。
當然，在第一次 一目了然，我們不會
希望你能理解 該消息的全部內容。
和教訓，所以一 今天是怎麼回事
要嘗試，以通知 圖案，或類似的事情，
錯誤你可能有 在過去所遇到。
因此，讓我們只能梳理出 這些話是很熟悉。
大，紅色的錯誤顯然是 象徵性的東西是錯誤的。
>> 隱式聲明 庫函數printf。
所以，即使我不太明白什麼 隱式聲明的庫函數
手段，肯定是問題 涉及到莫名其妙的printf。
這問題的根源 有宣稱它做。
>> 聲明一個函數 提到它的第一次。
而我們所使用的術語上週 聲明一個函數的原型，
無論是與在頂部的一行您的 自己的文件或在一個所謂的頭文件。
在什麼文件做我們說 上週printf的是報價，
引文結束，宣告？
在哪些文件是它的原型？
>> 所以，如果你還記得，第一件事我 類型化，幾乎每個節目最後時間 -
一不小心剛才開始 打字myself--是這一個這裡 -
hash--的#include <stio--為 輸入/ output--點H和事實上，
如果我現在保存這個文件，我要去 先走，並清除我的屏幕，
您可以通過鍵入做 清除，或者你可以按住控制L，
只是清除終端窗口 只是為了消除一些混亂。
>> 我要繼續前進， 再輸入make buggy0，回車。
瞧，我仍然看到 從鐺長的命令，
但沒有錯誤消息這一次。
事實上，如果我這樣做./buggy0， 和上次一樣，
其中，點指本 目錄，斜線只是手段，
這裡談到的程序的名稱和 該方案的這個名字是buggy0，
輸入“你好，世界”。
>> 現在，你怎麼可能有 收集這一解決方案
而不必 認識到盡可能多的話
像我一樣，當然，有 這樣做了這麼多年？
那麼，實現每一個問題 集，我們為您介紹一個命令
這CS50自己的工作人員 編寫了一個名為help50。
事實上，C不規範 問題設置至於如何使用它。
>> 但help50本質 一個程序，CS50的工作人員
寫道，允許您運行 一個命令或運行程序，
如果你不明白它的 輸出，將其輸出傳遞到help50，
在該點處的軟件 該課程的員工寫
會看你的程序的輸出 一行行的，每個字符。
如果我們的工作人員，承認 您所遇到的錯誤消息，
我們將嘗試一些惹你 反問，有一些建議，
就像一個TF或CA還是我自己 將在辦公時間做的人。
>> 所以看help50如果你不 一定承認的問題。
但不要依賴它 太多的拐杖。
當然，試著去了解它的 輸出，然後從中吸取教訓
使得僅一次或兩次你 以往運行help50特定錯誤
信息。
在這之後，你應該 更好的裝備自己
要弄清楚它實際上是什麼。
>> 讓我們做另外一個在這裡。
讓我先走了，而在另一個 文件我們會打電話給這個buggy1.c。
而在這個文件中，我 要deliberately--
但假裝我不 明白我做了什麼樣的錯誤。
>> 我要繼續前進，做this-- 的#include，因為我已​​經
吸取了教訓，從剛才的。
詮釋主要（無效），如前。
然後在這裡我會 做字符串s - get_string。
而從上一次回顧 這意味著，哎，電腦，
給我一個變量，稱之為s和 使該變量字符串的類型
所以我可以存儲一個或多個字在裡面。
>> 然後在右邊 等號的一面
被get_string，這是一個 在CS50庫中的函數
這正是這麼做的。
它得到一個函數，然後 雙手從從右到左。
所以這個等號並不意味著 “等於”象我們想像的數學。
這意味著由右至左的分配。
因此，這意味著，採取從字符串 在用戶和其存儲的S內部。
>> 現在，讓我們使用它。
現在讓我和繼續作為第二 行，讓我繼續前進，說“你好” -
不是“世界”，而是“你好，％S-- 這是我們的佔位符，逗號S，
這是我們的變量， 然後分號。
所以，如果我沒有搞砸太多 在這裡，這看起來像正確的代碼。
>> 而我的直覺現在進行編譯。
該文件稱為buggy1.c。
所以我打算做使buggy1，回車。
和織補-它，如果沒有 甚至更多的錯誤比以前。
我的意思是，還有更多 錯誤消息它會
似乎比這個計劃的實際行。
>> 但外賣這裡， 即使你不堪重負
有兩個或三個或 四個錯誤信息，
始終專注於非常 首先這些消息。
看最頂部的之一， 滾動備份如需要的話。
所以在這裡我輸入化妝buggy1。
下面是按預期鏘輸出。
>> 而這裡的第一個紅色錯誤。
未聲明的標識符使用 字符串，沒有我的意思是標準？
因此，標準是 其實別的東西。
它指的是用戶的 鍵盤，本質上。
>> 但是，這不是我的意思。
我的意思是字符串，我的意思是get_string。
那麼它是什麼，我 忘了這樣做的時候？
什麼是缺少這個時間呢？
我有我的#include， 所以我有機會對printf。
>> 但我沒有 訪問只是還沒有？
那麼，同上次一樣， 我需要告訴編譯器
鐺一下這些功能。
Get_string不來 與C並且特別地，它
不來的 頭文件。
相反，它進來 一些工作人員寫的，
這是一個不同的文件 名字，但恰當地命名。
>> 所以，簡單地通過添加一行 從最後一次代碼 - 召回
這鐺運行時，它會 來看看我的代碼從上到下，
左到右。
這將注意到， 哦，你想要的。
讓我去發現， 無論它是在服務器上，
複製和粘貼，從本質上講， 進入自己的文件的頂部
以便在該故事這一點上， 線1中，程序的其餘部分
可事實上，使用任何功能 在其中，其中get_string。
所以我要忽視 這些錯誤的其餘部分，
因為我確實懷疑，只有 第一個真正重要的。
而且我要繼續前進並重新運行， 救了我的文件後作出buggy1。
瞧，它的工作。
而且，如果我做./buggy1和類型，為 例如，Zamyla，我現在會打招呼，
Zamyla，而不是你好，世界。
>> 好吧。
因此，這裡的外賣店則是， 之一，盡量收集盡可能多的，你可以
單從錯誤信息，尋找 在一些可識別的話。
除了上述，使用每個help50 問題設置規範。
但除此之外，也總是期待 在最嚴重的錯誤只，至少
首先，看什麼信息 它實際上可能屈服。
但事實證明，那裡的 甚至更多的功能內置
進入CS50庫幫助 您在學期初上
而早在節目 找出什麼地方出了錯。
所以，讓我們做一個例子在這裡。
我打算把這個buggy2，其中， 再次，將被有缺陷的出
門口，由設計。
>> 而且我要繼續前進 做的#include。
然後我要做的主要INT（無效）。
然後我會為循環做。
對於（INT I _ 0。
i小於或等於10。
我++，然後在大括號，我要去 在這裡打印出來只是一種標籤符號
和一個新行字符。
>> 所以，我的意圖與此 程序是很簡單
迭代10次 並在每個迭代
每一次循環 通過循環，
打印出井號標籤， ＃標籤，＃標籤。
每行一個，因為我 有新的行那裡。
並回顧，對 循環，每最後week--
你會得到更多的 熟悉的語法
通過使用它與實踐 long--前，這給了我
一個變量叫我並將其設置為0。
>> 這增加我對 每次迭代1。
所以我變為1到2到3。
然後該條件在 分號之間的中間
被檢查的每一次迭代，使 確保我們仍然在範圍內。
所以我想重複10次，所以我 有那種非常直觀地只是
把10作為我的上限那裡。
>> 然而，之後當我運行這一點， 用make編譯它buggy2--
它並編譯確定。
所以，我沒有 語法錯誤這一次。
現在讓我繼續前進 並運行buggy2，回車。
現在向上滾動。
讓我增加 窗口的大小。
>> 我似乎有1，2，3， 4，5，6，7，8，9，10，11。
因此，有11＃標籤，即使 我明確提出10這個循環中。
現在，有些人可能會立即看到 什麼錯誤是因為，實際上，這
是不是一個很嚴重的錯誤，使。
但它是非常普遍 在做很早。
>> 我想指出的是，雖然， 是的，我怎麼可能算出這個？
那麼，事實證明， 在CS50庫來
不僅get_string和get_int 和get_float等功能。
它還配備了一個特殊功能 所謂EPRINTF，或者錯誤的printf。
它只是存在，使 它為您輕鬆一點點
調試代碼，只是當 在屏幕上顯示一條錯誤消息
並知道它是從哪裡來的。
>> 因此，舉例來說，有一件事我可能 在這裡做的這個功能是this--
EPRINTF，然後我要繼續前進 並說現在我是％I，反斜線，正。
而且我要在我的價值堵塞。
而向上頂，因為這 是CS50庫中，
我要繼續前進 並包括
所以我有機會獲得這一功能。
但是，讓我們考慮一下線 9應該做的事情。
我將最終刪除。
這無關 我的首要目標。
但是EPRINTF，錯誤的printf，只是意思 給我一些診斷信息。
當我運行我的程序，我想 看到這個屏幕上暫時
也僅僅理解 這是怎麼回事。
>> 而且，事實上，在每個 這裡的迭代9號線
我想看看，什麼是我的價值？
什麼是我的價值？
並希望，我應該只 看到該消息，另外，10次。
>> 因此，讓我繼續前進， 重新編譯我的程序，
因為我做任何時間 我做出改變。 ./buggy2。
和now--確定。
還有很多更多的事情。
因此，讓我在向上滾動 一個更大的窗口。
>> 你會看到，每個 該主題標籤仍然打印。
但是，在與他們每個人是現在這個 診斷輸出格式如下。
在這裡我的程序的名稱是buggy2。
該文件的名稱是buggy2.c。
行號從其中 此印為9號線。
然後那右邊的是 我很期待的錯誤消息。
>> 什麼是很好的關於這就是 現在我不必一定算
在我的腦袋就是我的程序在做什麼。
我可以看到，在 第一次迭代i是0，
然後1，然後2，然後3，然後是4，那麼 5，然後6，則如圖7所示，然後如圖8所示，然後如圖9所示，然後
10。
所以等一下。
這裡發生了什麼？
我似乎仍然計數 如預期可達10。
>> 但是，在沒有開始呢？
0，1，2，3，4，5，6，7，8，9 10。
因此0，1，2，3，4，5，6，7， 8，9，10--第11手指
指示的問題。
我似乎已經算 錯誤在我的循環。
而不是去10次迭代， 我從0開始，
我在，並通過10結束。
但因為，像計算機， 我從0開始計數，
我應該計數 到，但不通過，10。
>> 這樣一來，修復，最終我 在這裡實現的，是兩件事情之一。
我很可能簡單地說 數到小於10。
因此0，1，2，3，4，5，6，7，8， 9，這的確是正確的，
儘管這聽起來有點不對勁。
或者，我可以做到小於或等於 9，只要我從0開始。
或者，如果你真的不喜歡，你 可以計數到10，但是從1開始。
但同樣，這恰恰是並不常見。
在programming--儘管 與其說是在Scratch--
但在編程 C和其他語言，
如JavaScript和 Python和其他人，這是
只是很常見的 我們的二元討論
剛開始點票 最低的數字就可以了，這是0。
好吧。
所以這是EPRINTF。
再次，現在我已經想通了我 的問題，我要回去0
經過不到10，我要去 去和刪除EPRINTF。
>> 它不應該，當我在那裡 我的船代碼或提交我的代碼
或展示給其他人。
它實際上只是意味著 要暫時使用。
但現在我已經解決了這個問題 特別的問題也是如此。
>> 好吧，讓我們做一個例子在這裡 我要去掀起如下。
我要繼續前進， 的#include。 $ 50個
而且我要繼續前進 和的#i​​nclude。
>> 而且我要救 此文件buggy3.c。
而且我要繼續前進 並宣布INT主要（無效）。
然後裡面有 我該怎麼辦INT I _ -
我想要實現一個程序 用get_negative_int。
這是不存在又一個函數。
因此，我們要實現 它在短短的時刻。
但是，我們要明白為什麼 它在第一輪馬車。
一旦我已經得到 來自用戶的INT，
我只是要打印％我是一個負 整數，反斜線，正，逗號，我。
換言之，所有我 希望這個程序做
是從一個負INT 用戶，然後打印出
某某是負中間體
>> 現在我需要實現這個功能。
所以在我的文件後，我要去 提前並聲明調用的函數
get_negative_int（無效） - 我們將 回過頭來什麼該行又指
在moment-- INT N;渡渡鳥 在fo​​llowing-- printf的n是：。
然後我要做的N - get_int， 和為此而n是大於0。
然後返回否;.
>> 因此，有很多事情 這一點，但沒有一個我們沒有
看看上週，至少簡要介紹。
於是就在這裡10行，我宣布 函數調用get_negative_int，
我已經把（無效），在 括號，原因是這
不採取一個輸入。
我不傳遞任何 此功能。
我剛開始從東西回來。
>> 而我很希望 回來是整數。
有在任何數據類型 Ç稱為negative_int。
這只是詮釋，所以這是怎麼回事 要對我們確保
這實際上就​​是價值 返回的不僅是一個int
但也為負。
>> 第12行，我聲明一個變量 所謂n和使其int類型的。
然後在第13行至18，我 做一些事情，而事情是真實的。
我會繼續和印刷 N是，結腸，然後一個空間，
像對用戶的提示。
>> 然後我打電話get_int和 存儲其所謂的返回值
在變量n。
但我會繼續做 此而n是大於0。
換句話說，如果用戶給我一個 int和該數量是大於0，
ERGO的，積極的，我要去 只是不停的再次提示用戶，
守時再次提示，以迫使他們到 合作，並給我一個負int值。
>> 而一旦n是實際negative-- 假設用戶終於類型-50，
那麼這個while循環不再是真實的 因為-50不大於0。
所以我們擺脫了 循環邏輯和返回否。
>> 但是有一個其他 事情我必須做的。
我可以簡單地這樣做 通過複製和粘貼
在該文件的頂部的一行代碼。
我需要教鐺， 或承諾鐺，
明確地說我會的， 的確，去實現
此功能get_negative_int。
它可能只是文件中的低。
再次，記得鏘 讀取事情從上到下，
左到右，所以你不能 如果調用鏘功能
不知道它會存在。
>> 現在，不幸的是，這個程序， 因為有些人可能已經注意到了，
已經是馬車。
讓我繼續前進，使buggy3。
它編譯，所以我現在的問題是不 語法錯誤，如文字錯誤，
它實際上將是一個邏輯 錯誤，我已經刻意
製成為契機 步是怎麼回事。
>> 我要繼續前進 現在運行buggy3。
我要去 未來，而不是合作。
我要去給它1號。
它不喜歡它，所以 它再次提示我。
>> 2點怎麼樣？
3？
50？
這些都不是工作。
如何-50？
和節目似乎工作。
>> 讓我嘗試一次。
讓我試試-1，似乎工作。
讓我嘗試-2，似乎工作。
讓我試試0。
呵呵，這是不正確。
現在，我們是一個小迂腐在這裡。
但它確實的情況下滿足0 既不積極也不消極。
這樣一來，事實證明我的計劃是 說0是負整數，
這不是技術上是正確的。
>> 現在，它為什麼這樣做呢？
嗯，這可能是顯而易見的。
而且，事實上，程序 意味著是相當簡單的
所以我們有一些探索。
>> 但是，讓我們引進第三調試 技術這裡叫做debug50。
因此，這是一個程序 我們剛剛創建
今年被稱為debug50 這將允許您
使用什麼叫做內置 圖形化調試器在CS50 IDE。
和調試器只是一個程序， 通常，您可以運行程序
但一步一步一個腳印，行 由一行行，暫停，戳
四周，看著變量，這樣 程序不只是吹過去，你
和快速打印的東西 或不打印的東西。
它給你一個機會，在 人類的速度，與它進行交互。
>> 而要做到這一點，你 只需做到以下幾點。
編譯代碼後， 我已經做了，buggy3，
你繼續運行debug50 ./buggy。
那麼像help50有運行 help50然後命令，
debug50有運行debug50和 然後命令的名稱。
>> 現在看我的屏幕上會發生什麼， 上，特別是右側。
當我打運行，所有的 這突如其來的右側面板
在屏幕上打開。
而且還有很多要去 在乍看之下。
但是，也不是太 什麼可擔心的呢。
>> 這正顯示出我的一切 這是怎麼回事我的計劃內
現在和通過這些 按鈕向上頂然後
讓我步我的代碼 最終一步一步一步。
但不是現在。
注意會發生什麼。
在我的終端窗口 我被提示n個。
而且我要繼續前進， 這種合作的時間和類型-1。
雖然和一點點隱晦，-1 是一個負整數，符合市場預期。
>> 然後孩子退出， 狀態0 GDBSERVER退出。
GDB，GNU調試器，是名 底層軟件的
實現這個調試器。
但是這一切的真正含義，調試器 臨走的時候，因為我的程序退出
和一切都很好。
如果我想真正的調試我的程序， 我要告訴先發製人debug50，
在哪裡我要開始 通過我的代碼加強？
>> 也許最簡單的方法 要做到這一點是如下。
如果我將鼠標懸停在 我的編輯的排水溝在這裡，
所以真的只是這裡的側邊欄， 到行號的左側，
請注意，如果我只是點擊 有一次，我把一個小紅點。
這小紅點， 就像停止的跡象，這意味著，哎，
debug50，我的代碼暫停執行 在那裡，當我運行這個程序。
>> 因此，讓我們做到這一點。
讓我繼續前進，運行我的程序 再次debug50 ./buggy3，回車。
而現在，通知，東西 不同的事情發生了。
我沒有被提示 但在我的終端窗口
任何東西，因為我還沒有 在我的計劃變得那裡。
請注意，在第8行 這是現在突出，
並有一個小箭頭 左說，你是在這裡暫停。
這行代碼，行 8，尚未執行。
>> 這有什麼奇怪的，如果我期待 在這裡的右手邊，
請注意，我是一個局部 可變的，在這個意義上本地
這是當前函數內。
和它的價值，顯然是在默認情況下， 和排序的便利，為0。
但我沒有輸入0。
這恰好是它的 此刻默認值。
>> 因此，讓我繼續前進，現在做到這一點。
讓我繼續前進，在 右上方這裡，我
要繼續前進， 點擊這個第一個圖標其中
指步過這意味著不要跳過 ，但跨過這行代碼，
執行它沿途。
>> 現在，請注意，我 提示剛剛更改。
這是為什麼？
我告訴debug50， 運行此行代碼。
這是什麼行代碼呢？
提示我要一個int。
好。
讓我合作。
現在讓我繼續前進，並鍵入-1，回車。
而現在發現了什麼變化。
在右手側， 我的本地變量i
被指示為-1現在。
而且它是int類型仍然。
>> 和通知，也我所謂的 調用堆棧，在哪裡我停下？
我們將詳細討論 這在未來。
但調用堆棧只是指的是什麼 功能是當前在運動。
現在，它只是主力。
而現在唯一的地方 變量為i為1的值。
>> 而當我終於跨過這條線 在這裡，與右上角的圖標相同，
-1是一個負整數。
現在，它在暫停的花括號。
讓我們讓它做它的事。
我跨過這道線，瞧。
>> 所以，不是所有的可怕 啟發然而，
但它確實讓我暫停 並認為通過邏輯
這是什麼程序在做什麼。
但是，這不是錯誤的情況。
讓我們再次做到這一點如下。
>> 我要離開這個斷點 上與紅色點線8。
我要重新運行debug50。
它會自動暫停在這裡。
但這一次，而不是 跨過這條線，
讓我真正去裡面 get_negative_int並找出，
為什麼它接受0作為一個有效的答案？
>> 因此，而不是點擊步過。
我要繼續前進 單擊單步執行。
並注意8號線這 現在現在突然突出
變成17行。
>> 現在，它不是調試器 已經跳過管線14和15和16。
它只是沒有什麼 給你看那裡。
那些只是聲明變量， 再有就是這個詞做
然後一個開放的花括號。
唯一的功能線這 多汁真的是這樣一個在這裡，17。
而這也正是我們所 自動暫停。
>> 所以輸出（“n.is：”）;,這樣 這還沒有發生。
因此，讓我們繼續前進，並單擊步過。
現在我的提示，的確， 變更為（「n為：“）。
現在get_int，我不會去 打擾踏入，
因為該功能是 對圖書館在CS50的。
這大概是正確的。
>> 所以我要繼續前進， 那種通過給予合作
int，但不是消極的int值。
因此，讓我繼續前進，命中0。
現在，這裡是什麼情況 當我得到了第21行？
我不會再重複。
我似乎並沒有停留在這個循環。
換句話說，這種黃色 酒吧沒有保住繞來繞去，
又一圈，又一圈。
>> 現在，這是為什麼？
好了，正，什麼是現在N'
我可以看看當地 在調試器變量。
n為0。
好吧，什麼是我的條件？
>> 20--線20，好了， 0是大於0。
這是不正確的。
0不大於0。
所以，我打破了這一點。
>> 所以這就是為什麼上線 21，如果我真的繼續下去，
我將返​​回0，即使 雖然我應該拒絕0
因為實際上沒有被否定。
所以，現在，我真的不連 關心的調試器。
得到它，我不需要 了解更多的是怎麼回事。
>> 所以我要繼續前進， 只需點擊播放按鈕，
而讓這完成了。
現在，我已經意識到我 錯誤顯然是在第20行。
這是我的邏輯錯誤。
>> 所以我想要什麼 做改變呢？
如果問題是，我不 醒目0，它只是一個邏輯上的錯誤。
我可以說，當n為 大於或等於0，
保持一再提示用戶。
>> 所以，再次，簡單的錯誤，也許 當你看到我，即使明顯
寫只需幾分鐘前。
但這裡的外賣 是，與調試50，
與調試 軟件更一般地，
你有這個新發現的力量 通過你自己的代碼走走，看看
通過該右側面板是什麼 您的變量值。
所以，你不一定 要使用的東西
像你EPRINTF打印這些值。
實際上，你可以看到他們 肉眼在屏幕上。
>> 現在，除此之外，值得注意的 這還有另一種技術，它是
其實超級常見。
你可能想知道為什麼這個小 這裡的傢伙一直坐在台上。
因此，有這樣的技術，一般 被稱為橡皮鴨調試，
這真的只是一個 證明的事實
經常當程序員 正在編寫代碼，
他們不一定 與他人合作，
或在共享的環境中工作。
>> 他們在家裡是那種。
也許這是在深夜。
他們試圖圖 出在他們的代碼的一些bug。
而他們只是沒有看到它。
>> 而且也沒有室友。
沒有的TF。
周圍沒有CA。
所有他們有他們的貨架上 就是這個小橡皮鴨。
>> 所以橡皮鴨調試 只是這個邀請
想愚蠢的東西 因為這是一個真正的生物，
實際上走過你的代碼 口頭本無生命的物體。
因此，例如，如果 這是我的例子這裡 -
而回顧過去， 問題是此，
如果我刪除這個代碼的第一行， 我繼續前進並再次馬車0，
記得我有這些 這裡的錯誤消息。
這樣的想法在這裡，可笑雖然我 感覺此刻公開這樣做，
就是錯誤。
>> 好了，所以我的問題是，我已經 隱式聲明的庫函數。
而該庫函數的printf。
Declare-- OK，聲明 提醒原型的我。
>> 這意味著我需要真正 告訴編譯器事先什麼
該函數的模樣。
等一下。
我沒有標準io.h.
非常感謝你。
>> 因此，只要這個過程of--你 不需要居然有一隻鴨子。
但是這種想法走 自己通過自己的代碼
這樣你甚至可以聽到 你自己，讓你
實現你自己的疏忽 言論，一般的想法。
>> 而且，也許更合理，沒有那麼 多與人，但更多地參與
例如，我們剛剛在車3.C那樣， 你可能會走自己通過它
如下。
這樣也好，橡膠 鴨子，DDB，如果你願意。
在這裡，我們在我的主要功能， 我打電話讓負int值。
>> 而我得到的返回值。
我將其存儲在左手側 在一個變線8叫我。
OK，而是等待，如何做 該得到的價值？
讓我看一下功能線12。
>> 在第12行，我們已接到負int類型。
不帶任何投入， 並返回一個int，OK。
我宣布第14行變量n。
它要存儲的整數。
這就是我想要的。
>> 所以，做以下，而ñis--讓 我撤銷了什麼我修復已經作出。
所以，當n大於 0，打印出n，則確定。
然後調用INT得到存儲在n個。
然後檢查是否n為0， n是不是 - 它就在那裡。
所以，再一次，你不 需要實際的鴨子。
但只是走自己通過 你的代碼作為一種智力活動
往往會幫你 意識到發生了什麼事情，
而不是僅僅做一些 這樣，盯著屏幕，
而不是說自己通過 它，這是實話不
近作為有效的技術。
所以你有它，一 不同的技術數
其實對於調試代碼 和找茬，所有這一切
應該在你的工具箱的工具 讓你不熬夜，
尤其是，你在用餐 廳，或者在辦公時間內，
撞你的頭靠在 牆，試圖解決一些問題。
意識到有軟件工具。
有橡皮鴨子的工具。
而且還有的全體員工 支持等著伸出援助之手。
>> 所以，現在的問題的詞 套，和以什麼我們希望您
擺脫他們，怎麼樣 我們去評估。
每個課程的教學大綱， CS50的問題集
在四個主坐標軸進行評估，因此， 到speak--範圍，正確性，設計，
和風格。
和範圍只是指的是多少 這塊你咬掉？
如何太大的問題，你試過嗎？
努力什麼級別 你表現？
>> 正確性，確實該程序作為工作 它應該每CS50規格
當你提供一定的投入 或某些輸出回來了嗎？
設計是最主觀的人。
而且它是一個將 時間最長學習
最長任教，在 只要它歸結為，
如何寫得好是你的代碼？
>> 這是一件事，只是打印正確 輸出或返回正確的價值觀。
但是你在做它作為 最有效的方式？
你這樣做除法 與征服，或二進制
搜索，因為我們很快就會看到，我們沒有 兩個星期前用手機書？
有沒有更好的辦法來解決 問題比你現在有嗎？
這對於更好的設計的機會。
>> 然後style--如何 漂亮是你的代碼？
你會發現，我敢 講究縮進我的代碼，
並確保我的變量 合理地命名。 N，
而總之，就是一個好名字 電話號碼，我為計數整數，
S代表字符串。
我們可以有更長 變量名風格。
風格是多麼好 沒有你的代碼看？
而且是怎麼讀？
>> 隨著時間的推移，你的助教 和轉錄因子會在使用過程中做
是為您提供與 一種定性反饋
讓您獲得更好的 在這些不同的方面。
而在我們如何計 評價每個這些軸，
它通常非常少 水桶，讓你，一般來說，
了解你正在做的有多好感。
而且，事實上，如果你收到的分數 其中任何axes--正確性，設計
和風格especially--這個數字 通常為1和5之間。
而且，從字面上看，如果你得到 3公司在學期的開始，
這是一個非常好的事情。
這意味著仍然有 改進的餘地，
你會希望在 服用類首次。
有希望的天花板一些位 到你渴望深遠。
並因此讓3對 最早的作品，
如果不是一些2的和4的， 的確是一件好事。
這是很有效範圍內， 在良好的預期。
>> 如果你的心是賽車，等待 一分鐘，五分之三。
這的確是一個6出10。
這是60％。
我的上帝，這是一個F.
>> 不是。
這不，其實這一點。
相反，它是改善的機會 在這學期的課程。
如果你得到一些 標準普爾，這些都是一個機會
採取辦公時間的優勢， 當然部分和其他資源。
>> 最好的是一個機會，真的， 是的你剛剛多遠驕傲
過來學期的課程。
所以一定要明白，如果沒有 否則，三是良好的。
它允許增長空間隨著時間的推移。
>> 至於這些軸如何 加權，實事求是你
會花大部分的時間越來越 事情要工作，更談不上正常。
因此正確性往往 進行加權的多數，與
三這個乘法因素。
設計也很重要，但 你不一定什麼
花費所有這些小時 試圖讓事情剛參加工作。
>> 所以，它的權重 多了幾分淡然。
然後風格加權最少。
儘管這是毫不遜色 重要的根本，
它只是，也許， 最簡單的事情做對，
模仿的例子，我們 做講座和部分，
事情很好 縮進和評論，
等是最簡單的中 要做的事情和得到的權利。
從而這樣，實現 這些都是分
是比較容易掌握。
>> 而現在一個字上 this--學術誠信。
所以每場的 教學大綱，你會看到
該課程具有相當 解決此語位。
而且課程需要的問題 學術誠信頗為重視。
>> 我們有區別， 是好還是壞，
具有發送的每一年 學生紀律處分
比大多數其他任何 當然，我所知道的。
這不一定 指示該事實
即CS的學生，或學生CS50，是 任何低於你的同學誠實的。
但現實的情況，在這 世界，電子，我們只是
有技術 意味著檢測這一點。
>> 重要的是要我們 跨類公平
我們做這個檢測，提高 這個問題時，我們看到的東西。
而剛剛畫一幅畫，真 幫助這樣的事情在下沉，
這些都是數字 學生在過去的10年
已經參與了一些 學術誠信等問題，
與一些32名學生 從2015年秋天，這
是說我們需要做 此事非常重視。
而最終，這些數字組成， 最近，約3％，4％左右
之類的。
>> 因此，對於超級廣大學生 看來，線條清晰。
但千萬記住這 介意，尤其是晚
晚上用時掙扎 一些解決問題的方法集，
有機制 為讓自己更好
支持可能比你 想，即使在那個時刻。
要知道，當我們收到 學生提交的作業，我們跨越
今年比較各提交 較去年每提交，
對從2007年的每提交， 既然，看著，還有，
代碼庫在線， 論壇，招聘網站。
我們提到這一點， 真的，所有著想
充分披露，如果 別人可以在網上找到它，
當然，我們也能做到的過程。
但是，真的，精神 的過程歸結
在教學大綱這一條款。
這真的是正義的，是合理的。
>> 如果我們要詳細說說 只有一個多一點的語言，
意識到所有的實質 您提交給本課程的工作
必須是你自己。
但是內的，也肯定有 機會和鼓勵，
在轉向和教學價值 others--自己的課題組，中科院，
助教，和其他類， 支持，更不用說朋友
和室友誰研究 CS和編程之前。
等有該津貼。
和拇指的一般規則 是this--尋求幫助的時候，
你可能會顯示你的代碼給別人， 但你可能無法查看他們的。
所以，即使你在辦公時間內， 或者在D廳，或其他地方
一些件套的工作， 旁邊一個朋友，其工作
是完全正常，在 一天的工作結束
最終應屬於每個 你分別與不
有一些協同努力， 除了最後的項目中，
它允許和鼓勵。
>> 要知道，如果你是 東西掙扎
和你的朋友恰好 是在這個更好的，你，
或者在這個問題比你強， 或者稍遠一點比你提前，
這是完全合理的轉 你的朋友說，哎，
你不介意看我的代碼在這裡， 幫我找出我的問題是什麼？
並希望在 教學價值的興趣
那位朋友不只是 說，哦，這樣做，而是
什麼是你缺少行 6，或者類似的東西？
但是該解決方案是不 為朋友在你身邊
說，哦，這裡，讓我拉 這件事，並展示我的解決方案給你。
所以這是該行。
你看你的代碼 其他人，但你可能不
查看他們的，受其他 在使用過程中的教學大綱約束。
>> 所以，千萬記住這 所謂遺憾子句
在使用過程中的教學大綱為好， 如果你犯了一些行為的
是不是合理的，但它帶來 課程的負責人的注意
在72小時內，該過程 可處以當地制裁措施
可以包括不令人滿意的或 不及格提交的工作。
但當然不會指的 此事作進一步的紀律處分，
除了在行為屢禁不止的情況。
換句話說，如果你做一些 愚蠢的，特別是深夜，決策
該第二天早上，兩天 以後，你醒來時會發現，
我在想什麼？
你做CS50有一個出口 固定的問題
和擁有了它，讓我們 會中途遇見你和處理
與它在一個問題，既 教育和為貴有價值的，
但在某些方面仍然懲罰。
而現在，採取邊關閉，這一點。
>> [視頻回放]
>> [音樂]
>> [結束播放]
DAVID J. MALAN：好吧，我們又回來了。
現在我們來看看之一 首先我們的現實世界中域
在CS50，藝術加密的， 發送和接收的技術
秘密信息，加密 如果你願意的消息，
如果你只能被破譯 發件人有一些關鍵因素
為好。
因此，要鼓勵這一點，我們將採取 一看這東西在這裡，
這是一個示例 秘密的解碼器環的
可為了搞清楚使用 什麼是秘密信息實際上是。
其實，早在 當天在小學，
如果你發送的秘密消息 一些朋友或在課堂上的一些好感，
你可能認為 你被聰明
在您的紙條變化的， 像，A到B和B到C和C至D，
等等。
但你實際上是加密 您的信息，甚至
如果這是一個有點瑣碎，不 硬的教師來實現，
好吧，如果你只是改變 B到A和C到B，
你居然找出 什麼消息了，
但你在加密信息。
>> 你只是做 簡單地說，就像拉爾夫在這裡
在一個著名的電影，播放 相當多廣告nauseum每年冬天。
[視頻回放]
-be它眾所周知， 拉爾夫·帕克特此
任命小的一員 孤兒安妮秘密圈
並有權所有榮譽 並與之發生利益。
>> -Signed，小孤兒安妮， 會簽皮埃爾·安德烈，在墨水。
榮譽和利益， 在已經九歲的時候。
>> [他們咆哮]
-來吧。
讓我們開始吧。
我並不需要所有的爵士樂 關於走私和海盜。
>> - 聽明天晚上 結論冒險
黑色的海盜船。
現在，它的時間為 安妮的秘密信息
為你秘社的成員。
請記住，孩子，只有成員 安妮的秘密圈
可以解碼安妮的秘密信息。
>> 請記住，安妮取決於你。
設置你的引腳B2。
這裡是該消息。
12，11--
>> -I我在，我的第一次秘密會晤。
>> -14，11，18，16。
>> -Pierre在今晚的聲音很大。
我可以告訴大家，今晚的 信息是非常重要的。
>> -3，25日，這是一個消息 從安妮自己。
記住，不要告訴任何人。
>> -90秒後，我的唯一 房間在房子裡一個男孩九
可以坐在隱私和解碼。
啊哈，B！
我去了下，E.
>> 第一個字是可以。
S，它現在更容易到來，U，25--
>> 哦，來吧，拉爾夫，我得走了！
>> -I'll被降權，馬！
嘖嘖颼颼！
>> -T，O，可以肯定的中場休息，一定要什麼呢？
什麼是小孤兒 安妮想說什麼？
一定要什麼呢？
>> -Ralphie，安迪已經得到了 走，請你出來？
>> -All權，馬！
我馬上就出來！
>> -I接近現在是越來越。
張力是可怕的。
它以前如何？
這個星球的命運 在資產負債可能會掛起。
>> -Ralphie！
安迪的得走了！
>> -I'll是正確的，對於哭出聲來！
>> -Almost在那裡，我的手指飛去，我的腦海裡 是鋼陷阱，每一個毛孔振動。
這幾乎是明確的，是的，是的，是的。
>> -be一定要喝你的阿華田。
阿華田？
一個最低級的商業？
王八蛋。
[結束播放]
DAVID J. MALAN：OK，所以 這是一個很長的路
引入密碼學， 也阿華田。
事實上，從這個古老的廣告 在這裡，為什麼阿華田這麼好？
這是成熟的一種濃縮提取 大麥芽，純奶油牛奶，
並特地準備了可可，一起 天然磷脂和維生素。
它是與進一步強化 額外的維生素B和D，百勝。
你仍然可以得到它，很顯然， 在亞馬遜，因為我們在這裡做。
>> 但是，這裡的動機是為了 密碼學介紹，具體
已知類型的加密的 作為密鑰加密。
和顧名思義，整個 密鑰加密系統的安全性，
如果你願意，一種方法 只是擾
兩個人之間的信息是， 只有發​​件人和只有收件人
知道一個秘密key--一定的價值，一些 秘密短語，一些秘密號碼，即
讓他們來加密 和解密信息。
和密碼，說真的， 只是這個0的一周。
>> 這是一個問題，那裡的投入， 像英語的實際消息
或任何語言，你 要發送給別人上課，
或在互聯網上。
有一些輸出，這是會 要被擾頻的信息，即你
希望收件人接收。
而且，即使有人在 中間接收它太，
你不希望它們 一定能夠解密，
因為這裡面 黑盒子，或算法，
是某種機制，有的一步一步 指令，採取該輸入
並將其轉換成 輸出，在希望以安全的方式。
>> 並且，實際上，有一些 詞彙在這個世界上，如下所示。
純文本是一個字 計算機科學家會
用它來描述輸入 消息，喜歡英語
或任何語言，你實際上 要發送到其他人。
然後密文是加擾 給加密，或加密，
其版本。
>> 但是這裡有一種其它成分。
還有另一個輸入 秘密密鑰加密。
這就是密鑰本身， 這是，通常，
正如我們所看到的，一數，或 字母或字，無論
該算法它實際上是期待。
>> 你如何解密信息？
你怎麼解讀呢？
嗯，你只是扭轉 輸出和輸入。
>> 換句話說，一旦有人 收到加密郵件，
他或她只是有 要知道，相​​同的密鑰。
他們已經收到的密文。
並通過封堵這兩個 輸入到加密系統，
算法，這種黑匣子，出 應該原始明文。
所以這是非常高的水平 鑑於什麼密碼實際上是
所有關於。
>> 因此，讓我們到達那裡。
現在讓我們看看下面 東西引擎蓋
我們一直理所當然的 過去的一周，而本次會議
這裡 - 字符串。
在一天結束的字符串 僅僅是一個字符序列。
>> 這可能是世界您好，或 你好Zamyla，或什麼的。
但是，這是什麼意思 是字符序列？
事實上，CS50庫給出 我們稱為串的數據類型。
>> 但實際上，沒有 這樣的事情在C.字符串
這真的只是一個序列 人品，人品，性格，
性格，背，背， 回來，回來，內頁
您的計算機的內存或RAM。
我們會更深入，在 當我們看內存本身的未來，
與利用，並且 所涉及的威脅。
>> 但是，讓我們考慮用字符串Zamyla。
如此只是名字 這裡的人，Zamyla，
即序列 字符，Z-A-M-Y-L-A。
現在讓我們假設Zamyla的名字 正被存儲在計算機內的
程序。
>> 好了，按理說我們應該 可以看看那些字符
個別。
所以我只是要畫一個小 在這裡Zamyla的名稱框中。
而且它是在C的情況下，當你 有一個字符串，如Zamyla--也許
該字符串已經從回來 比如找到字符串的函數，
實際上你可以操縱 通過它的性格特徵。
>> 現在，這是有密切關係的 談話在另一方面，由於
在密碼學，如果你想改變 A到B和B到C和C到D，
等，則需要能夠 看單個字符
在一個字符串。
你需要能夠改變 在Z別的東西時，A
別的東西，併購來 別的東西，等等。
因此，我們需要一種方法， 編程，所以
可以說，在C能夠改變 並期待在單個字母。
我們可以做到這一點如下。
>> 讓我去頭回CS50 IDE。
讓我先走 並創建一個新的文件
我會打電話給這次string0， 作為第一個這樣的例子，C點。
而且我要繼續前進 鞭打它，如下所示。
>> 所以包括CS50.h和 然後包括標準io.h，
其中，我幾乎總是會 是使用在我的節目中，至少
原來。
詮釋主要作廢，然後在這裡我 要做得到的字符串得到的字符串。
然後我要去 繼續前進，做到這一點。
我要先走 並且，作為一個全面的檢查，
只是說，你好，百分之S， 分號，使串0。
嗯哦，我做了什麼嗎？
哦，我沒有插上。
所以，經驗教訓，即 不是故意的。
>> 因此錯誤，百分之更多 轉換不是數據參數。
這是哪裡， 線7-- OK，所以我有，
報價引文結束，這是 我的字符串的printf。
我有一個百分號。
但我錯過了第二個參數。
>> 我錯過了逗號s，這 我沒有在前面的例子。
因此，一個很好的機會來解決 多了一個錯誤，不慎。
現在讓我跑 string0，鍵入Zamyla。
OK，你好Zamyla。
>> 因此，我們運行該種方案 現在幾個不同的時間。
但是，讓我們做一個東西 有點不同這一次。
而不是僅僅打印Zamyla的 整個名稱用了printf的，
讓我們做吧逐個字符。
>> 我將使用一個for循環。
我要去給自己 計數變量，叫我。
而且我要保持迭代，所以 只要i小於s的長度。
>> 事實證明，我們沒 這樣做最後一次，
將c自帶 函數調用斯特林。
早在一天，並在一般 仍然實現功能的時候，
人們往往會選擇很 簡潔的名稱那種聲音
就像你想要什麼，即使它是 缺少了幾個元音字母或字母。
所以，斯特林是 一個函數的名稱，用以
需要之間的爭論 括號這應該是一個字符串。
它只是返回一個整數， 該字符串的長度。
>> 因此，這對7號線環是怎麼回事 開始計算在i等於0。
這將增加 我在每次迭代
1，因為我們已經做了幾次。
但它會只做 此直到點
當我是長度 的字符串本身。
>> 因此，這是一種方式，最終 遍歷字符
在字符串中原樣如下。
我要打印出不 整個字符串，但％的C，
單個字符 其次是一個新行。
然後我要去 繼續前進，我需要
說我要打印 的S i個字符。
>> 因此，如果i是指示可變 串，其中的索引
你在這，我需要能夠 說，給我S的第i個字符。
和c具有這樣的一種方式 這跟方括號。
您只需說出名字了 串，在此情況下為s。
然後你用方括號，這是 通常略高於您的返回鍵或回車
鍵在鍵盤上。
然後你放的索引 要打印的字符。
因此指數將是一個 number-- 0，或1，或2，或3，或點，
點，點，其他一些數字。
>> 而且我們要確保它會 是正確的號碼，因為我
從0開始計數。
而默認情況下，第一個字符 在一個字符串是按照慣例0。
而第二個字符是支架1。
和第三個字符是托架2。
而且你不想去過多 到目前為止，但我們不會因為我們
要增加只有我，直到 等於字符串的長度。
並在該點， 這個循環將停止。
>> 因此，讓我繼續前進，保存此 程序運行make串0。
但我搞砸了。
隱式聲明的庫函數 與類型，斯特靈和現在such--，
這聽起來很熟悉。
但它不是printf的。
而且它不能得到的字符串。
>> 我沒有搞砸的 以同樣的方式這一次。
但是請注意，到這裡一點點下降 此外，包含頭文件string.h，
明確規定了 聲明斯特林。
所以實際上是有一個線索。
>> 的確事實證明 還有另外一個頭文件
我們已經不習慣 在課堂上還沒有，但它是
在這些可用 給你，叫string.h中。
而在該文件中，文件string.h 是斯特林聲明。
因此，讓我繼續前進， 保存此，使串
0--不錯，沒有錯誤消息這一次。
>> ./string0 Zamyla和 我正要敲回車，
在這一點上的GetString是怎麼回事 返回字符串，把它放在秒。
然後，對於循環會遍歷 以上的s的人物之一的時間，
並打印，每行一個，因為 我在結束反斜杠ñ。
所以，我可以省略反斜線 N，然後只打印Zamyla所有
在同一條線上， 有效地重新實現
printf的，這是不是所有的有用。
但在這種情況下，我沒有做到這一點。
其實我已經打印在 字符的時間，每行一個，
讓我們實際看到的效果。
>> 但是，我在這裡要注意的一件事。
我們會回來的 這在未來的一周。
事實證明，這 代碼可能是馬車。
>> 原來，GET字符串 和生活中的一些其他功能
不一定總是 回到你期待什麼。
我們從去年一流知道 時間這一點，得到
串應該返回字符串。
但是，如果用戶鍵入了這樣的 一個長字或段落或文章
有只是沒有足夠的 內存在計算機中，以適應它。
>> 就像，如果出了什麼 不對引擎蓋底下？
它可能不會經常發生， 但它可能發生一次
在一段時間，非常罕見。
所以事實證明，GET字符串 喜歡它的功能並不一定
總是返回字符串。
他們可能會返回一些錯誤值， 一些哨兵值這麼說，
指示 出了問題。
而你只知道這個來自 在課堂上已經學會了，現在，
還是看了一些文檔。
原來，GET字符串 可以返回一個稱為空值。
null是一個特殊值，我們將 回來在未來的一周。
但現在，只知道如果我想 要在前進的真正合適
使用GET字符串，我 不應該只是調用它，
而盲目使用它的返回值， 相信這是一個字符串。
>> 我先說， 哎，等一下，只
繼續如果s不等於 空，空在那裡，再次
只是一些特殊的價值。
而且它是唯一的特別價值，你 需要擔心的GET字符串。
獲取字符串要么會 返回一個字符串或空。
>> 而這個感嘆號等號 你可能知道，也許從數學課
你可能劃上等號與 通過它的線，以指示不相等。
這不是一般的人物 你可以輸入你的鍵盤上。
因此在大多數編程語言， 當你想說不相等，
您使用感嘆號， 否則稱為爆炸。
所以你說一聲等於，這 表示不等於，邏輯上。
這就像有沒有一個更大的 大於或等於，或小於
等於你的鍵在鍵盤上 ，做這一切在一個符號。
所以這就是為什麼，在過去的例子， 你做了一個開放的支架，然後
一個等號，為了做 大於或者說，不到。
>> 那麼，這裡的外賣？
這僅僅是現在的一種方式 引入這種語法，此功能，
遍歷各個 字符串中的字符。
而且就像那些方 支架讓你得到他們，
考慮這些方括號內 那種暗示在這個底層
設計，即每 字符串內字符
是種盒裝某處下方 罩在計算機的內存中。
>> 但是，讓我們的這個變體。
事實證明，這 程序是正確的。
所以，每CS50的軸評估 代碼，這現在是正確的。
尤其是現在，我檢查 空，這個程序應該永不死機。
而我只知道，從經驗。
但是沒有什麼別的了 我們真的可以去錯在這裡。
但它不是非常精心設計的， 因為讓我們回到基礎。
>> 首先，principles-- 請問一個for循環嗎？
一個for循環做了三件事。
它初始化一些 值，如果你是問。
它檢查的條件。
再經過各 迭代中，每個循環後，
它增加了一些 值，或值，在這裡。
>> 那麼，是什麼意思呢？
我們初始化我為0。
我們檢查並確保i小於 s的長度，這是Z-A-M-Y-L-A，
所以其小於6。
而且，事實上，0小於6。
>> 我們從Zamyla的名字打印出來態。
然後我們增加我從0到1。
然後，我們檢查，是減少1 比S的長度是多少？
s的長度為6。
是的。
>> 因此，我們在Zamyla的名字，ZA打印。
我們增加i從0到1，2。
然後，我們檢查，是小於2 Zamyla的名稱的長度。
6-所以2小於6。
是的，讓我們打印出來，現在M在 Zamyla的姓名，第三個字符。
>> 這裡的關鍵是，在每個 故事的重複，我檢查，
為i小於Zamyla的長度？
但美中不足的是， 斯特林不是屬性。
那些你們誰編程 之前在Java或其他語言
可能知道長度的字符串 一個屬性，只是一些只讀值。
>> 在這種情況下，C中，如果這是 一個函數，從字面上
計數的數目 在Zamyla每次字符
我們調用該函數。
每次你讓計算機使用 斯特林，它採取一看Zamyla，
並說Z-A-M-Y-L-A，6。
和它返回6。
你叫下一次 它裡面的for循環，
它要去看看Zamyla 再次，說Z-A-M-Y-L-A，6。
而且它會返回6。
那麼什麼是愚蠢的這個設計？
>> 為什麼我的代碼不出來的5 5 設計現在，可以這麼說？
好吧，我問了 問題不必要的。
我做更多的工作比我需要。
>> 因此，即使 答案是正確的，我
問計算機，什麼是 Zamyla的長度再次
又一次，又一次，又一次？
那答案是 永遠不會改變。
它總是將是6。
>> 因此，比這更好的解決辦法 會是這樣一個版本。
讓我繼續前進，把它放在一個 所謂string1.c單獨的文件，
只是為了保持它分開。
而事實證明，在為 循環，你實際上可以
同時聲明多個變量。
>> 所以我要保持我並將其設置為0。
但我也要去 添加一個逗號，並說，
給我一個叫做變量n，其 值等於S的字符串長度。
現在，請讓我的狀態 我只要小​​於n。
>> 因此，在這種方式中，邏輯是 相同在一天結束。
但我想起了 值6，在這種情況下。
什麼是Zamyla的名字的長度？
而我把它以n。
>> 我還在檢查 每次的條件。
0小於6？
1小於6？
是小於6 2，等等？
>> 但我不要求計算機 又一次，又一次，什麼是
Zamyla的名字的長度？
什麼是Zamyla的名字的長度？
這是什麼Zamyla姓名的長度是多少？
我從字面上記住的是，第一， 只有回答第二個變量n。
所以這現在會是不僅 正確，而且精心設計的。
>> 那麼，如何風格？
我命名我的變量 不錯，我會說。
他們現在是超級簡潔。
這是完全的罰款。
>> 如果你只有一個 串中的程序，
你還不如叫它S代表字符串。
如果你只有一個變量 為程序中的計算，
你還不如把它叫做我。
如果你有一個長度，N 超級普遍。
但我還沒有評論我的任何代碼。
>> 我沒有通知rea​​der-- 不管是我的TF，或TA，
或者只是colleague--什麼是應該 在這個程序中繼續。
因此獲得良好的作風， 我願意這樣做
是this--東西 輸入像詢問用戶。
而且我可以重寫 此任何數量的方式。
>> 確保S--確保GET 字符串返回的字符串。
然後在這裡 - 這或許 最重要的comment--迭代
過在一個時間s中一個字符。
我可以用任何 英語語言的選擇
這裡描述每個 的這些代碼塊。
>> 請注意，我沒有把 在每一行代碼註釋，
真的只是在有趣 偏多，那些
有一定的意義，我可能 想使超清晰的人
閱讀我的代碼。
而你為什麼調用get 字符串詢問用戶輸入？
甚至，一個是不一定 所有的描述。
但它有助於講一個故事，因為 在故事的第二行，確保
得到的字符串返回的字符串。
>> 而在故事中的第三行是， 遍歷s中一個人物
在一個時間。
而現在只是良好的措施， 我要繼續前進，並添加
多一條評論，只是 在S打印第i個字符表示。
現在，我做了什麼 在這一天結束了嗎？
>> 我增加了一些英語 詞語的註釋形式。
斜線斜線符號意味著，哎， 計算機，這是對人類，
不是你的，計算機。
所以他們在邏輯上被忽略。
他們只是在那裡。
>> 而且，事實上，CS50 IDE顯示他們作為 灰色，作為是有用的，但不是關鍵
到該程序。
請注意，你現在可以做的。
無論你懂C 編程或沒有，你
只需退後在這個 程序和脫脂的意見。
詢問用戶輸入，確保 得到的字符串返回一個字符串，
遍歷s中的字符 一次一個，打印字符
第i個字符S--你不 甚至有看代碼
要理解這個程序做什麼。
而且，更好的是，如果你自己看 這個節目在一兩個星期，
或一個月，或者一年， 你也不必
在代碼盯著， 試圖記住，
那我想這個代碼呢？
>> 你告訴自己。
你所描述它自己， 或者一些同事或助教，或TF。
所以這現在會是 正確的，良好的設計，
最終良好的作風為好。
所以，做記住這一點。
>> 因此，有一個其他 的事情，我要在這裡做
現在可以透露究竟是什麼 正在進行的發動機罩的下方。
因此，有此功能 在C和其他語言，
所謂的類型轉換 要么含蓄
或明確允許你轉換 從一種數據類型到另一種。
我們一直這樣處理 據今天的字符串。
>> 並且字符串的字符。
但是從本週召回 0，是什麼字？
人物只是一個抽象 上numbers--十進制數的頂部，
和小數真的只是一個 關於二進​​制數的頂部抽象，
因為我們定義它。
>> 因此，字符是數字。
和數字字符， 只是取決於上下文。
而事實證明，這裡面 的計算機程序的，
您可以指定你想怎麼看 在該節目內的位？
>> 從0本週我們不得不召回 ASCII，這僅僅是該代碼
映射字母數字。
和我們說，資本A是65。
資本B是66，等等。
>> 和通知，我們基本上是有字符上 這裡的最上面一行，為C會打電話給他們，
字符，然後 在第二排整數。
而事實證明，你可以轉換 無縫兩個，通常之間。
如果我們想要做的 這種刻意，我們
可能要處理 這樣的事情。
>> 我們可能要轉換 上殼體，以降低
的情況下，或小寫字母為大寫。
而事實證明那裡的 這裡實際上是一個模式
我們可以在短短的時刻擁抱。
但是讓我們先來看一個 例如明確地這樣做的。
>> 我要重新回到CS50 IDE。
我要去創造一個 文件調用的Ascii 0.C.
而且我要繼續前進，加我 標準io.h頂部，INT主要無效
在我的函數的頂部。
然後，我只是做 following-- for循環從i等於，
讓我們說，65。
>> 然後我將是小於 在字母表65，加上26個字母。
因此，我將讓電腦 做數學題對我來說。
然後該環內， 我該怎麼打印？
>> ％c是％I反斜線ñ。
現在，我想在兩個值堵塞。
我暫時把問題 標誌著有邀請的問題。
>> 我想從65迭代起 對於26個英文字母，
打印出在每個迭代該 人物的積分相同。
換句話說，我想 遍歷26號打印
ASCII字符是什麼，信， 和相應的數字is--什麼
真的只是重建 從幻燈片圖表。
那麼，應該將這些問號是什麼？
>> 那麼，事實證明，第二 應該僅僅是變量i。
我希望看到，作為一個數字。
而中間的說法 在這裡，我可以告訴電腦
對待該整數 i設定為一個字符，從而
在這裡用它替換％的C.
>> 換句話說，如果我的 人類的程序員，知道
這些都只是數字 在一天結束。
我知道，65應 映射到一些字符。
有了這個明確的轉換， 有一個括號，
要數據類型的名稱 轉換，和一個封閉的括號，
你可以告訴 計算機，嘿嘿，計算機，
這個整數轉換為char。
>> 所以，當我運行這個 程序編譯後，
讓我們看看我get--使ASCII 0。
該死，我做了什麼錯在這裡？
使用未聲明的標識符， 沒事的，不是故意的，
但讓​​我們看看如果我們不能 原因通過此。
>> 因此，行five--所以我沒有得到 很遠的事情搞砸了。
沒關係。
因此，對於我行5等於65--我明白了。
所以請記住，在C，不像有些 如果你有事先編程語言
經驗，你有 告訴計算機，
不像划痕，是什麼 變量的類型是。
>> 而我在這裡忘了關鍵短語。
在五號線，我用我開始。
但是，我還沒有告訴Ç 什麼樣的數據類型是。
所以我要在這裡進去 說啊，讓一個整數。
>> 現在我要繼續前進，並重新編譯。
這固定的。
./ascii0輸入，這很酷。
它不僅是超級快 讓計算機這個問題，
而不是看它在幻燈片上， 它打印出每行一個，A為65，
B是66，一路down--因為我 這樣做26 times--到字母Z，
這是90。
而且，事實上，稍 更智能的會
一直對我不依賴 在計算機上，以添加26。
我剛做 90為好，這樣長時間
因為我不犯​​同樣的錯誤兩次。
我想通過上去 Z，不僅僅是高達到y。
>> 所以這是一個明確的轉換。
事實證明，這 甚至沒有必要。
讓我繼續前進，重新運行此 編譯器，然後重新運行ASCII 0。
事實證明，C是非常聰明。
>> 和printf，特別 是相當聰明。
如果你只是傳遞一個我兩次 兩個佔位符的printf
會意識到，哦，我知道你 給了我一個integer--一些數字，
像65或90，或什麼的。
但是，我知道你要我 像格式化字符該號碼。
所以printf的可隱式轉換 在詮釋為你一個char為好。
所以，這不是一個問題都沒有。
>> 但是請注意，因為這等同， 我們實際上可以做到這一點。
讓我繼續前進，做一個 this-- 1.C.的Ascii其他版本
取而代之的迭代 整數，才能真正打擊你的心
通過遍歷字符。
如果一個charç獲得資本A，I 想先走，並做到這一點，
只要C小於或等於 資本Z.並在每個迭代
我想增加C，我可以 現在在我行的printf這裡
比如說，百分比C是 我百分之再次，逗號C.
>> 而現在，我可以去另一個方向， 鑄人品明確
為整數。
因此，再次，你為什麼會這麼做？
這是一個有點怪異排序的 計數的字符條款。
>> 但是，如果你明白什麼是 怎麼回事引擎蓋下，
真的沒有魔法。
你這麼說，哎，給電腦 我一個叫char類型的C變量。
它初始化為大寫的A和 注意單引號問題。
>> 在C字，從召回 上週，您可以使用單引號。
對於字符串，單詞， 詞組，使用雙引號。
OK，電腦，繼續做這個，所以 只要字符小於
或等於z。
而我從ASCII表知道，所有的 這些ASCII碼是連續的。
>> 有沒有差距。
所以，這只是A到Z， 通過每一個號碼分開。
然後，我可以遞增 一個char，如果我真正想要的。
在一天結束時， 它只是一個數字。
我知道這個。
所以，我只能推測到1添加到它。
>> 然後這個時候，我打印C， 然後積分當量。
我甚至不需要明確的轉換。
我可以讓printf和的 計算機理出頭緒，
所以，現在，如果我跑 使Ascii1./ascii1，
我得到同樣的事情為好。
>> 無用的程序，though--沒有人 是要實際編寫軟件
為了搞清楚，究竟是什麼 映射到一個數字，或B，或Z？
你只是去Google一下，或 網上查一查，或者看它
幻燈片上，或類似物。
那麼，這實際上得到有用嗎？
>> 好了，說那 滑，注意有
一個實際的模式在這裡大寫之間 和小寫，這是不是偶然的。
請注意，資本A是65。
小寫a是97。
並有多遠較低情況下？
>> 所以65是97多少步走呢？
所以97減65為32。
所以資本為65。
如果添加32到， 你會得到一個小寫。
而且，等效如果你減去32， 你回到資本A--同為B
以小B，大C到小℃。
>> 所有這些差距是32分開。
現在，這似乎讓我們 做類似微軟的Word，
或谷歌文檔功能，您 可以選擇一切，然後說，
改變這一切為小寫，或 全部改為大寫，
或僅改變第一個字 一個句子為大寫字母。
事實上，我們可以做一些事情 這樣的自己。
>> 讓我繼續前進，保存文件 這裡所說的利用0.C.
讓我們繼續前進，掀起程序 這正是這麼做的，如下所示。
因此，包括CS50庫。
而包括標準I / O。
>> 我知道這是即將到來。
所以，我打算把它放在 已經存在，string.h中，
所以我有機會獲得 之類的東西斯特林，
再詮釋主空，一如往常。
然後我要繼續前進 做琴弦得到得到的字符串，
只是為了獲得來自用戶的字符串。
然後我要去 做我的完整性檢查。
如果字符串不等於空， 那麼它的安全進行。
什麼做我想做的事？
我要遍歷從i等於0， 和n高達S的字符串長度。
>> 而且我要做到這一點，只要 i小於n，並且我加再加。
到目前為止，我真的只是 從之前借款的想法。
現在我要介紹一個分支。
>> 所以，回想著划痕，其中 我們在路上的叉，
上週在C.我要去 這麼一說，s中的第i個字符
大於或 等於降低情況下，
而且 - 在抓你會從字面上 說和，但在C你說符號，
ampersand--和s中​​的第i個字符 小於或等於小寫Z，
讓我們做一些有趣的事情。
讓我們來實際打印出來 性格沒有換行符
即在字符串中的字符， 第i個字符的字符串中。
>> 但是，讓我們繼續前進， 減去它32。
否則，如果在字符 字符串，我們正在尋找
是不是稍微之間 和小Z，繼續前進
和剛剛打印出來不變。
因此，我們已經介紹了 此括號表示法
我們的關係，想在 第i個字符的字符串中。
>> 我已經添加了一些條件邏輯，如 刮在上週的一周一物，何處
我只是用我的根本 一個什麼樣的了解
正在進行的發動機罩的下方。
為s的第i個字符 大於或等於一個？
像，它是97或98， 或99，等等？
>> 但是它也小於或等於 為小寫字母z的價值？
如果是這樣，這是什麼意思行？
14，這是排序的 整個想法的胚芽，
大寫字母 簡單地減去它32，
在這種情況下，因為我知道，這每 圖中，我的數字是如何表示。
因此，讓我們繼續前進，並運行此， 編譯利用0.c後，
和運行資本0。
>> 讓我們鍵入類似 Zamyla在全部小寫輸入。
現在我們有Zamyla全部大寫。
讓我們在所有小寫輸入羅布。
讓我們嘗試傑森全部小寫。
我們不斷收到 強制資本。
有一個小錯誤，我 那種沒有預料到的。
請注意我的新提示結束了 在同一行作為他們的名字，
這感覺有點凌亂。
>> 所以我要在這裡走， 其實在這個程序結束
打印出一個換行符。
就這樣。
但使用printf，你並不需要 傳遞變量或格式代碼。
你可以從字面上只是打印 像一個換行符。
>> 因此，讓我們繼續前進，使 再利用0，重新運行，Zamyla。
而現在這是一個有點漂亮。
現在，我的提示是對自己的新線。
所以這是一切優秀和良好。
所以這是一個很好的例子。
不過，我也不一定 需要硬編碼的32。
你知道嗎？
我可以say--我從來沒有 記住不同的是什麼。
>> 但我知道，如果我 有一個小寫字母，
我基本上是想減去關閉 任何的距離是小之間
一，大A，因為如果我假設 所有的其它字母的是相同的，
應該把工作做好。
但是，而不是這樣做，你知道嗎？
還有另一種方式。
>> 如果這是利用1.c--如果我是 以它放入一個單獨的文件。
讓我們做資本2.C如下。
我要真打掃一下這裡。
而不是甚至無需 知道也不關心那些低水平
實施細則，我代替 只是要打印的字符，
報價引文結束，百分比C和 然後調用另一個函數，
存在需要一個參數， 這是一個字符，像這樣。
>> 原來，在C，有 另一個函數調用
到上，這正如其名 建議需要的性格
它使得其上殼 等效，然後返回它
這樣的printf可以在那裡插上。
所以這樣做，雖然，我 需要引入另一個文件。
原來還有另一個文件 你只能從類知道，
或教材，或在線 引用，名為C type.h.
>> 所以，如果我補充一點，我的頭之間 文件，現在重新編譯這個程序，
capitalize2，./capitalize2 Enter鍵。
讓我們在所有類型Zamyla 小寫，還是工作原理相同。
但是，你知道嗎？
事實證明，到上 有一些其它功能。
>> 讓我介紹這個 命令這裡，有點笨拙
命名，但男人使用說明書。
事實證明，大多數Linux計算機， 因為我們使用的是這裡 - Linux的操作系統
系統 - 有一個命令 所謂的人，它說，
哎，電腦，給我 電腦的使用手冊。
你想做什麼 查找該手冊中？
>> 我想查找功能 叫上，回車。
這是一個有點神秘 有時閱讀。
但是請注意，我們是在 Linux的程序員手冊。
和它的所有文本。
並注意還有的 函數的名稱在這裡。
事實證明，它有一個表妹叫 降低，這則正好相反。
並根據大綱的通知，要使用這個 函數的手冊頁，可以這麼說，
告訴我，我 需要包括C type.h.
而且我知道，從實踐中。
>> 在這裡，它顯示了我兩 對於函數原型，
所以，如果我曾經想用這個 我知道他們採取什麼樣的作為輸入，
和他們返回作為輸出。
然後如果我讀 說明，我看
更詳細的功能做了什麼。
但是如果更重要的是， 我期待下返回值，
它說，返回的值是 轉換後的信，
或C，原來的輸入，如果 轉換是不可能的。
>> 換句話說，到上部會嘗試 到了一封信轉換為大寫。
如果是的話，它會返回。
但是，如果它不能為某些reason-- 也許它已經大寫，
也許這是一個驚嘆號 或一些其它punctuation--
它只是要 返回原來的C，
這意味著我可以讓我的代碼 更好的設計如下。
>> 我並不需要所有的 這些代碼織補行。
我的一切的線路 只是強調能
被折疊成只是一個簡單的 線，這是this-- printf的百分之
C到上小號支架我。
並且這將是一個 例如更好的設計。
>> 為什麼在7或8條線路實施 代碼，不管是什麼我只是
刪除，當你可以代替崩潰 所有的邏輯和決策
成一個單一的線，13現在，這 依賴於一個庫function--
隨C中的函數，但 究竟你想要它做的事。
而且，坦率地說，即使 它沒有附帶C，
你可以自己實現它， 我們已經看到，與獲得負INT
並獲得上週積極INT為好。
>> 此代碼是現在更具可讀性。
而且，事實上，如果我們向上滾動， 怎麼看怎麼更加緊湊
這個版本我的程序是。
這是一個有點頭重腳輕了， 所有這些包含。
不過沒關係，因為現在我站在 程序員的肩膀上
在我面前。
而誰是誰 實施上真正
幫了我一個忙，就像誰 實施斯特林真
幫了我一個忙前一段時間。
所以現在我們有一個 更好的設計方案
實現精確相同的邏輯。
>> 斯特林說起，讓 我繼續前進，做到這一點。
讓我繼續前進，保存 此文件stirling.c。
而事實證明，我們可以剝開 另一層倒也乾脆，現在。
我要繼續前進，鞭 起來主要另一個程序
在這裡，只需重新器具 字符串長度如下。
因此，這裡的代碼行 讓我從用戶的字符串。
我們繼續一次又一次地用這個。
讓我給自己一個叫做變量 存儲一些類型為int n個。
>> 讓我繼續前進， 請執行下列操作邏輯。
而s中的第n個字符不 不等於0反斜杠，繼續前進
和幅度值。
然後打印出來的printf％的I N。
我要求，這個方案在這裡， 沒有調用字符串長度，
計算出的字符串的長度。
>> 而神奇的是完全 包封在管線8
這裡看起來像新的語法， 這反斜線0單引號。
但是，這是為什麼？
那麼，考慮一下一直 事情這麼長的時間。
>> 而作為一個拋開我忘記之前，實現 那就是，除了手冊頁
附帶一個典型 Linux系統一樣CS50 IDE，
認識到我們的 當然的工作人員，也有
做了一個網站改版 這個所謂的想法一樣
reference.cs50.net，其具有 所有這些同一個人網頁，
所有相同 文檔，以及
在允許頂部的小盒子 你把所有的相當
晦澀難懂的語言變成不舒服 模式，在我們的教學人員，
走過了，並試圖簡化 一些讓一切語言
集中在思想，而不是 一些技術性的。
所以記住，reference.cs50.net 作為另一資源為好。
>> 但是，為什麼在字符串長度工作 我提出剛才的方法是什麼？
下面是再次Zamyla的名字。
而這裡的Zamyla的名字 盒裝的，因為我一直做，
畫它是一個圖片， 真的，只是一個字符序列。
但Zamyla不存在 在程序中的隔離。
>> 當你編寫和運行程序， 你用你的Mac或PC機
存儲器，或RAM可以這麼說。
你能想到的 您的計算機具有
大量內存千兆字節的這些日子。
而演出意味著數十億美元， 所以十億字節。
>> 但是，讓我們在時間上後退。
並假設我們使用 一個很老的計算機
只有32字節的內存。
我可以，我的電腦屏幕上， 簡單地得出這樣如下。
>> 我可以簡單地說，我的 計算機有這一切的內存。
這就好比記憶棒，如果 你還記得我們上次的圖片。
如果我只是劃分 這足夠的時間，
我主張，我有32個字節 的屏幕上存儲器。
>> 現在，在現實中，我只能 到目前為止，得出這樣的畫面在這裡。
所以我要繼續前進， ，只是按照慣例，
吸取我的電腦的內存作為 格，而不是僅僅為一個直線。
具體來說，我現在聲稱 此網格，這8個4格，
剛剛代表所有32個字節 在我的Mac可用內存，
或在我的電腦使用。
他們正在包裝 上兩行，只是
因為它適合更多的屏幕上。
但是，這是第一個字節。
這是第二個字節。
這是第三個字節。
>> 這是第32個字節。
或者，如果我們認為像電腦 科學家，這是字節0，1，2，3，31。
所以，你必須為0〜31，如果 你從0開始計數。
>> 因此，如果我們使用某個程序 該調用get字符串，
而我們從人類的字符串 像我一樣叫Zamyla，Z-A-M-Y-L-A，
如何在世界上做的 計算機跟踪哪些字節，
其中的內存塊， 屬於哪個字符串？
換言之，如果我們繼續 鍵入另一個名字輸入電腦，
像這樣的岸堤，調用 獲得字符串的第二時間，
A-N-D-我已經在結束了 計算機的存儲器。
但如何？
>> 那麼，事實證明，下面的 油煙機，什麼C字符串存儲什麼時候
該人的類型，或該 來自其他來源，它是
描繪它們的與端 一個特殊的character--反斜杠
0，這僅僅是一種特殊的方式 的說法一排80位。
>> 所以A--這是97號召回。
因此，一些8位模式 代表十進制數97。
這反斜杠0字面上數 0，又名NUL，N-U-L，不像早期，
的N- U-L-L，這是我們津津樂道。
但現在，只知道這 反斜線0是一排只有80位。
>> 而這只是該線路 沙子，說什麼向左
屬於一個字符串或一個數據類型。
和任何向右 屬於別的東西。
岸堤的名稱，同時， 剛剛視覺
發生纏繞到其他線路， 但是這只是一個審美細節，
同樣是NUL終止。
>> 這是一個A-N-D-I字符的字符串， 加上第五秘密性質，
所有0位，只是標定 安迪的名字的結尾為好。
如果我們調用get字符串第三次 在電腦中得到這樣一個字符串
瑪麗亞，M-A-R-I-A，同樣是瑪麗亞的 名NUL終止反斜杠0。
>> 這是根本不同的 如何從一台計算機通常會
存儲的整數，或一個浮動，或其他 數據類型仍，因為回憶，
的整數，通常是32位，或 4個字節，或者甚至64位，
或八個字節。
但是，在計算機的許多基元 在一種編程語言
具有固定數目的 在hood--下字節
也許1，也許2，也許4，也許8。
>> 但字符串，在設計上，有一個 動態字符數。
你不知道在前進，直到 人的類型Z-A-M-Y-L-A，
或M-A-R-I-A或A-N-D-I。你不知道 多少次，用戶將要擊中
鍵盤。
因此，您不知道如何 提前多少字符
你將需要。
>> 而所以C只是一種葉子像 引擎蓋下的秘密痕跡
在字符串的末尾。
存儲Z-A-M-Y-L-A在內存中後， 它也只是把等價
經過一段時間。
在一個句子的末尾， 它把80位，從而
要記得在哪裡 Zamyla開始和結束。
>> 那麼，什麼是連接， 那麼，這個計劃？
這裡這個程序，斯特林， 僅僅是一個機制
獲取一個字符串 從用戶線6。
7號線，我聲明一個變量 所謂的N和其設置為0。
>> 然後在第8行，我只是問 問題，而第n個字符不
不等於所有0 bits-- 換句話說，不
等於這個特殊 字符，反斜杠0，這
只是特別NUL character-- 繼續前進，只是幅度值。
>> 並繼續做下去，並保持 這樣做，並繼續做下去。
因此，即使在 我們使用我過去，
這是完全正常的 語義使用N，
如果你只是想 故意算上這一次，
只想為n調用它。
因此，這只是不斷問這個問題， 是第全0第n個字符？
如果沒有，看看下看看， 期待下，期待下，
期待下。
>> 但只要你看到反斜杠0， 這loop-- line 9至11--停止。
您將跳出while循環， 離開該變量n的內部
所有的的總數 你看到的字符串中的字符，
因此打印出來。
因此，讓我們試試這個。
>> 讓我繼續前進，而不 使用斯特林功能，
只是用我自己的版本自產自銷 這裡所說的斯特林，讓我先走
和運行斯特林，類型的東西 像Zamyla，這是我事先知道
是六個字符。
讓我們來看看它是否工作。
事實上，這是六人。
讓我們嘗試與Rob，三字， 三個大字，以及等等。
所以，這一切是怎麼回事 上罩下方。
並注意連接， 然後，在第一週
一流的，在這裡我們談到 像抽象，
這僅僅是這個分層的想法，或者 複雜性，對基本原則之上。
在這裡，我們的排序看 斯特林發動機罩下方，
可以這麼說，要弄清楚， 將如何實施？
>> 我們可以重新實現它自己。
但我們再也沒有去 重新實現斯特林。
我們只是要 使用斯特林為了
真正得到一些字符串的長度。
>> 但有沒有神奇 引擎蓋下。
如果你知道下面 引擎蓋，一個字符串
僅僅是一個字符序列。
和人物該序列 一切都可以解決數字
帶支架0，支架 1，支架2，和你
知道，在一個字符串的末尾是一個 特殊字符，你可以計算出
如何做到在任何東西 程序，因為所有它歸結為
在讀取和寫入內存。
即，在改變和尋找 在內存或搬東西
在內存，打印的東西 屏幕等上。
>> 現在讓我們用這個新發現 究竟是什麼弦樂器的理解
在引擎蓋下，和 剝開另一層
至今為止，我們已經 被完全忽略。
特別是，任何時間 我們已經實施了一項計劃，
我們已經有這行代碼 靠近頂部聲明為主。
我們已經指定int主要無效。
>> 而括號內是無效 一直說這一切的時候了主
本身不帶任何參數。
任何輸入的主要是 打算從用戶得到
有來自其他一些 機制，以獲得更多INT，
或獲得浮動，或得到的字符串， 或一些其它功能。
但事實證明， 當你寫一個程序，
實際上你可以指定 這個計劃應該
採取輸入從人 在命令行本身。
>> 換言之，儘管我們迄今為止 一直只是運行./hello打招呼
或類似的程序，所有的 我們已經使用過其他方案，
我們自己沒有寫， 一直在服用，看來，
命令行arguments-- 之類的東西作。
你這樣說時許， 然後第二個字。
或鏗鏘，你說鐺，然後 第二字，一個文件的名稱。
>> 甚至RM或CP，你可能 見過或已經使用
刪除或複製文件。
所有那些採取所謂的 命令行arguments--
在終端提示其他單詞。
但是到現在為止，我們 自己還沒有
這家豪華的同時從輸入 用戶在他或她實際運行
在命令行程序本身。
>> 但是，我們可以做到這一點通過重新申報 主要的前進，而不是有
無效括號中， 但是這兩種說法
instead--第一的整數， 和第二事
新的東西，我們要打電話 一個數組，在精神上類似的東西
什麼，我們在看到划痕作為一個列表，但 字符串數組，因為我們很快就會看到。
但是讓我們通過看到這個 舉例來說，以前我們
正是分辨是什麼意思。
>> 所以，如果我進入CS50 IDE 在這裡，我已經先行一步
而在一個名為文件中聲明 argv0.c以下模板。
並注意唯一 這是不同的，到目前為止
是，我已經改變了空為int ARGC ARGV串開支架，接近
托架。
並注意現在，有 沒有這些括號內。
>> 有沒有數。
而且沒有我，或 n或任何其他字母。
我只是用 方括號現在，
對於原因，我們會來 回到一會兒就好了。
>> 而現在正是我要做的就是這一點。
如果ARGC等於等於2-- 和召回等於等號
是平等的運營商比較 左和右的平等。
這不是分配 操作者，這是
單等號，這意味著副本 從右側向左側的一些值。
>> 如果ARGC等於等於2，我想 比如說，printf的，你好，百分數，新的生產線，
然後再插上in--和這裡的新 trick-- argv的支架1，其原因
我們再回過頭來在一個時刻。
如果ARGC沒有別的 等於2，你知道嗎？
就讓我們繼續前進，像往常一樣，打印 出打招呼，沒有替代的世界。
>> 所以它似乎如果ARGC，這 代表論點數，等於2，
我要打印出來 你好或其他東西。
否則，默認情況下，我 要打印的hello world。
所以，這是什麼意思？
>> 好吧，讓我繼續前進，保存 該文件，然後執行使argv0，
然後./argv0，回車。
它的世界問好。
現在，這是為什麼？
>> 那麼，事實證明，任何時候你 在命令行中運行一個程序，
你都盡顯我們會 通常調用的參數向量。
換句話說，自動 計算機，操作系統，
是要交給你的程序 本身所有的單詞列表
該人的類型在 提示，如果你
程序員想要做的 一些與該信息。
並且在這種情況下，唯一字 我在提示符下鍵入是./argv0。
>> 等參數的數目是 被傳遞到我的計劃是只有一個。
換言之，參數 算，也稱為ARGC
這裡為整數，只是其中的一個。
一，當然不相等的兩個。
所以這就是打印，世界你好。
>> 但讓​​我借這個地方。
讓我說，argv0。
然後怎麼樣瑪麗亞？
然後按Enter鍵。
>> 並注意什麼神奇地發生在這裡。
現在，而不是世界你好，我有 改變了這個程序的行為
由GET取輸入不 串或一些其它功能，
但很顯然，我的命令 本身，我在原來錄入。
我可以再次玩這個遊戲 它改變到斯泰利奧斯，例如。
>> 現在我看到另一名仍在。
而在這裡，我可以說安迪。
我可能會說Zamyla。
我們可以整天玩這個遊戲， 只是不同的價值觀堵漏，
只要我正好提供 兩個詞在提示符下，
這樣ARGC，我的說法算，為2。
>> 我看到這個名字插入 printf的，每個在這裡這種情況？
所以，我們現在似乎有 的表現力
採取從其他機構中的輸入， 從所謂的命令行
而不必等待 直到用戶運行該程序，
然後提示他或她的 使用類似的GET字符串。
>> 所以，這是什麼？
的argc，再次，僅僅是一個整數， words-- arguments--數
，在所提供的用戶 提示時，在終端窗口，
包括程序的名字。
因此，我們./argv0是有效的， 該程序的名字，
或如何我運行程序。
>> 這算作一個字。
所以ARGC是1。
但是，當我寫斯泰利奧斯，或 岸堤，或Zamyla或瑪麗亞，
這意味著參數計數為兩個。
所以現在有兩個詞傳入。
>> 和通知，我們可以繼續這樣的邏輯。
如果我居然說 像陳Zamyla，
全名，從而把 三個參數共，
現在它再次表示默認， 因為，當然，3不等於2。
>> 所以這樣，我必須 通過argv的這個新說法訪問
我們可以在技術上 叫我們想要的東西。
但按照慣例，這是 的argv和ARGC，分別為。
ARGV，參數向量，是種 用於編程的代名詞
用C功能稱為數組。
>> 陣列是類似的值的列表 背，背，背，背到。
換句話說，如果一個是這裡在 RAM，下一個是它旁邊，
和它旁邊。
他們不是所有的地方。
而這後一種情況下，這裡的東西 遍布在內存中的位置，
實際上可以是一個強大的功能。
但我們會回來的，我們當 說說票友的數據結構。
現在，數組只是一個 連續內存塊，
每個其元素 背，背，背，背，
和大致相同的類型。
>> 所以，如果你仔細想想，從 剛才，什麼是字符串？
那麼，一個字符串，如Zamyla， Z-A-M-Y-L-A，是，技術上，
只是陣列。
它是一個字符數組。
>> 所以，如果我們真的得出這樣的，因為我 先前做的，作為一個內存塊，
事實證明，每一種 字符佔用一個字節。
然後還有那個特別的 標記字符，反斜線0，
或全部八個0位，即 劃定該字符串的結尾。
因此，一個字符串，它變成 出，報價引文結束的字符串，
只是chara--的陣列 燒焦作為一個實際的數據類型。
>> 而現在的argv，meanwhile-- 讓我們回到節目。
ARGV，儘管我們看到這個詞 這裡的字符串，是不是字符串本身。
ARGV，參數向量， 是一個字符串數組。
>> 因此，正如你可以有數組 字符，你可以有較高的水平，
的strings--陣列如此，例如， 當我輸入剛才./argv0
argv0，空間Z-A-M-Y-L-A，我聲稱， ARGV曾在它 - ./argv0兩個字符串，
和Z-A-M-Y-L-A。在 換句話說，的argc為2。
這是為什麼？
>> 那麼，有效的，這是怎麼回事 上是每個這些字符串的
是，當然，字符數組 和以前一樣，它的每個字符
佔用一個字節。
不要混淆實際0 在節目的標有0名，
這意味著所有80位。
和Zamyla，同時，仍 也字符數組。
>> 這樣在一天結束時，它確實 看起來是這樣的引擎蓋下面。
但是ARGV，由大自然如何主力 作品，讓我來包裝這一切
成，如果你願意，一個更大的陣列 ，如果我們稍稍高出簡化
什麼畫面看起來喜歡和不 相當繪製規模那裡，
這個陣列只有大小為2，第一次 元件，它的包含字符串，
的第二元件 其中包含的字符串。
並且，反過來，如果 一種放大每個
這些字符串的你 看到引擎蓋下
是，每串是僅僅 字符數組。
>> 現在，就如同用字符串， 我們能夠獲得訪問
在一個字符串的第i個字符 使用方括號。
同樣，陣列 一般來說，我們可以
用方括號來獲得 在陣列中的任何數量的字符串？
例如，讓我 繼續前進，做到這一點。
>> 讓我繼續前進，創造argv1.c， 這是一個有點不同，這一次。
相反，檢查argc2的， 我要代替做到這一點。
對於int我得到0，我是少 比ARGC，我加再加，
然後這裡面打印出來， ％的S，新的生產線，然後
argv的支架我。
>> 因此，換句話說，我不處理 此刻單個字符。
ARGV，所暗示這些空方 括號的名稱的argv的權利，
指的argv是一個字符串數組。
和ARGC只是一個int。
>> 在這裡這條線，6是 說一套i等於0。
計算所有達路， 但不包括的argc。
然後在每次迭代中， 打印出字符串。
什麼字符串？
>> 第i個字符串argv中。
所以，從前我是前 用方括號
方式就可以得到第i 字符的字符串，現在
我用方括號 獲得在一個數組的第i個字符串。
因此，它是一種一層 以上概念。
>> 還等什麼是整齊這個 現在的程序，如果我編譯argv1，
然後做./argv1，然後鍵入 在類似富酒吧巴茲，
這是三個默認的話，一個 計算機科學家到達任何時間
他或她需要一些佔位的話， 並按下回車鍵，每一個的這些話，
包括程序的名稱， 是argv中在第一位置，
最終被印刷一次一個。
如果我改變這一點，我說 像argv1 Zamyla陳，
我們得到了所有這三個的 也就是說，這是argv0，
argv1，argv2，因為在這種 ARGC的情況下，計數，為3。
>> 但是，什麼是整齊的是，如果你明白 那argv的只是一個字符串數組，
你明白一個字符串 是一個字符數組，
我們實際上可以種使用該 方括號多次
選擇一個字符串，然後選擇 字符串中的字符，
潛水更深如下。
在這個例子中，讓我去 前進，稱之為argv2.c。
而在這個例子中，讓我先走 並做following--對於int我得到0，
i小於的argc，我加 再加上，就像以前一樣。
因此，在其他words--現在這個 越來越複雜的足夠了。
然後我會說 遍歷argv中的字符串，
作為對自己的註釋。
然後我將有一個 嵌套的循環，你可能
這樣做，或認為 這樣做，在划痕，其中
我要說int--我 不會再使用我，
因為我不想影子，或 排序覆蓋現有的我。
>> 我打算，相反，J個，因為 這是我去到的變量後，我，
當我只是想 算簡單的數字。
對於j得到0--並且還，正，將要 得到的argv支架我的船尾長，
只要j是小於M， Ĵ加再加，做到以下幾點。
而這裡的有趣的部分。
>> 打印出一個字符和一個新的生產線， 堵漏argv中我支架，支​​架學家
好了，讓我在這裡補充一些意見。
遍歷字符 在當前字符串，
在第i個字符串打印j個字符。
所以，現在，讓我們考慮 這是什麼意思的意見。
>> 遍歷字符串 在argv--多少
字符串的argv，它是一個數組？
ARGC很多，所以我遍歷 從i等於0到ARGC。
同時，多少個字符 是argv中的第i個字符串中？
>> 好了，得到的答案， 我只需要調用字符串長度
在當前字符串我照顧 對，這是argv的支架我。
我要去臨時存儲 值N，只是為了緩存目的，
記住它的效率。
然後，我會初始化J即可0， 繼續下去，只要j是小於n，
並在每次迭代增量學家
>> 然後在這裡，每 我的第12行評論，
打印出一個字符， 其次是一個新行，
具體的argv支架 我給我的第i個串
在argv--所以第一句話， 第二個字，第三字，等等。
和則J潛水更深，並獲得 我該單詞的第j個字符。
因此，實際上，你可以把 的argv作為多維的，
作為一個二維的，陣列 其中的每一個字那種長相
像這樣在你的心中的 眼，每一個人物
是種組成，在 一列，是否有幫助。
>> 在現實中，當我們逗 這除了在未來數週，
這將是一個小 比這更複雜。
但是，你可真 想不到的是，就目前而言，
因為眼前這個二維 它陣列，其中一個水平
是所有的字符串。
然後，如果你在更深，你潛水 可以得到在各個字符
這裡所使用這個符號在其中。
>> 那麼，什麼是實際效果？
讓我繼續前進， 使argv2--織補它。
我在這裡犯了一個錯誤。
隱含聲明 庫函數斯特林。
所以，這一切的時候，它的 也許是適當的
我們正在排序整理 正是我們開始的地方。
>> 我搞砸了，隱式聲明 庫函數斯特林。
OK，等一下。
我記得，尤其是 因為它是在這裡。
我需要包括string.h中的 這個版本的程序。
>> 讓我繼續前進，包括 string.h中，保存，勇往直前
並重新編譯argv2。
而現在，我們開始吧，讓argv2，回車。
雖然這是一個有點 神秘的第一眼，
公告稱，的確， 印刷是點argv2。
>> 但是，如果我輸入後有些字 提示，像argv2 Zamyla陳，
回車，也有點 神秘的第一眼。
但是，如果我們滾動回漲， ./argv2 Z-A-M-Y-L-A C-H-A-N。
因此，我們遍歷每一個字。
而反過來，我們遍歷 一個字中的每一個字符。
>> 現在，經過這一切， 意識到有
另外一個細節，我們已經種 中忽略這一整個時間。
我們只是挑開什麼 主要的投入可以嗎？
怎麼樣主要的輸出？
>> 所有這一切的時候，我們一直 只是複製和粘貼
在主陣地字INT， 雖然你可能在網上看到，
有時在舊版本不正確 C和編譯器的，他們說無效，
還是什麼都沒有。
但是，實際上，對於版本 的C我們使用，
C 11，或2011年，實現 它應該是int。
它應該要么是 無效或argc和argv在這裡。
>> 但是，為什麼INT主？
它是什麼實際上返回？
那麼，事實證明這一切的時候， 任何時候你已經寫了一個程序的主
總是返回的東西。
但它一直這樣做秘密。
>> 這東西是 INT，如第5行顯示。
但是什麼詮釋？
嗯，有這個 約定編程，
因此，如果沒有了 出了問題，一切都很好，
程序和一般功能 return--有些counterintuitively--
0。
0通常意味著一切都很好。
因此，即使你覺得 它在很多情況下是假的，
它實際上通常意味著一件好事
>> 同時，如果一個程序返回1， 或負1，或5，或負42
或任何非0的值， 這通常意味著
那出了問題。
事實上，在你自己的Mac或PC， 你可能已經看到實際
的錯誤消息，由此 說了什麼或其他錯誤
代碼負42，或錯誤代碼 23，或者類似的東西。
這個數字通常是只是一個提示 給程序員，或公司
該取得的軟件， 什麼地方出了錯，為什麼，
使他們可以通過看 他們的文檔或代碼，
並找出什麼 錯誤實際上意味著。
它一般不 對我們有用的最終用戶。
>> 但是，當主返回0，一切都很好。
如果你不指定 什麼主要應返回，
它只是會自動 你返回0。
但返回的東西 否則實際上是有用的。
>> 在這最後的節目，讓我 繼續前進，把這個exit.c中，
並介紹了去年今天的 主題，已知的作為錯誤代碼。
讓我繼續前進，包括我們 熟悉的文件往上頂，這樣做主要INT。
而這個時候，讓我們做INT ARGC， 字符串的argv，並與我的支架
暗示它的數組中為止。
然後讓我只是做一個全面的檢查。
這個時候，如果ARGC不 等於2，那麼你知道嗎？
算了吧。
我會說，嘿，用戶， 你缺少命令行參數
反斜杠ñ。
>> 然後就是這樣。
我想退出。
我要先發製人， 過早真的，回報
東西比1號等。
轉到價值第一 錯誤可能發生1。
如果你有一些其他錯誤 可能出現的情況，
你可能會說回報2或3回，或 甚至負1或負2。
>> 這些只是退出代碼 是，一般地，
唯一有用給程序員，或 公司認為航運該軟件。
但事實上，它是 不為0是非常重要的。
所以，如果在這個方案，我想 保證這個程序只
工作，如果用戶提供了我 有兩個參數計數，
程序的名字，以及其他一些 總之，我可以執行如下之多，
罵與printf的話說用戶， 缺少命令行參數，
返回1。
這只會立即 退出程序。
>> 只有當ARGC等於2，我們將踏踏實實 在這裡，在這一點上，我會說，
你好％的S，反斜線N，argv1。
換句話說，我 argv的0後不會去，
這是節目的只是名稱。
我想打印出來打招呼，逗號， 第二個字，人鍵入。
在這種情況下上 13號線，一切都很好。
>> 我知道的argc為2 邏輯上這個節目。
我要繼續前進，返回0。
順便說一句，請記住， 這是划痕也是如此。
>> 從邏輯上講，我可以這樣做 和封裝這些行
在這裡這個else子句的代碼。
但是，這樣的 不必要的縮進我的代碼。
我想使超 顯然，不管是什麼，
默認情況下，你好 事情會得到印，
只要用戶合作。
>> 所以這是很常見的使用 一個條件，只是一個如果，
捕捉一些錯誤 情況，然後退出。
然後，只要一切 好了，沒有一個東西，
只是有碼 外，如果，因為它是
相當於在這 特殊情況下，邏輯上。
所以我返回0，只是 明確表示一切都很好。
>> 如果我省略了返回0時，它會 自動假設我。
但現在，我要回 之一的至少這種情況下，
我要去，好措施和 清楚起見，在這種情況下返回0。
所以，現在讓我繼續前進，使退出， 這是一個完美的SEGUE見好就收。
>> 但要退出，讓我去 繼續做./exit，回車。
該程序大喊我， 缺少命令行參數。
OK，讓我配合。
>> 讓我來代替做./exit，大衛，回車。
而現在它說，你好大衛。
你通常不會看到這一點。
>> 但事實證明，有一個 在Linux中特殊的方式來實際看看
什麼退出代碼的程序退出。
有時在圖形 世界像的Mac OS或Windows，
你只看到這些數字時 錯誤消息在屏幕上彈出
和編程 顯示了該號碼。
但是，如果我們想看到什麼錯誤 消息是，我們可以做到這一點這裡 -
所以./exit，輸入，打印 缺少命令行參數。
>> 如果我現在做的迴聲$？這是 可笑的神秘期待。
但是$？
是神奇的咒語 ，說，哎，電腦，
告訴我以前的 程序的退出代碼了。
我敲回車。
我看到1，因為這是我 告訴我的主要功能返回。
>> 同時，如果我這樣做./exit大衛 並按下回車鍵，我明白了，你好大衛。
如果我現在做的迴聲$？我看你好0。
所以這實際上 是有價值的信息
在調試器的情況下，不那麼 多，你的人，會照顧。
但是，調試器和其他 程序，我們將利用這個學期
會經常看這個數字， 儘管這有點藏起來
除非你去找吧， 確定是否一個程序的
執行是正確或不正確的。
>> 所以說給我們帶來 此，在一天結束。
今天，我們開始通過查看 調試，並依次在課程
本身，然後更有趣的是， 技術上下方的引擎蓋
在什麼字符串，它持續 本週我們只是想當然，
當然把他們 理所當然的划痕。
>> 然後，我們看我們如何可以訪問 在一個字符串的各個字符，
然後又拿起一個較高的水平 看待事物，尋求如何well--
如果我們想獲得個別 在這樣的結構列表中的元素，
我們不能做到這一點與多個字符串？
我們可以用命令行參數。
但是，這幅畫在這裡只是盒 是示範這種總體思路
的陣列，或列表，或者一個矢量。
並根據 的背景下，所有的這些話
意思是略有不同的事情。
因此，在C，我們只打算 談論一個數組。
而一個數組是一大塊 內存，每個人的
元件是連續的，背部， 背，背，背到。
>> 與這些元素是，一般地， 相同的數據類型，字符，
人品，人品，性格，或 字符串，字符串，字符串，字符串或者int
INT，INT，不管它是什麼 我們試圖商店。
但在一天結束時，這是 它看起來像什麼概念。
你把你的 計算機的存儲器或RAM中。
而你刻出來成 相同尺寸的盒，所有這些都
回來了，要背， 背，背這個樣子。
>> 什麼是關於好的 這個想法和事實
我們能夠表達這樣的值 與第一我們的數據結構的
在課堂上，意味著我們可以開始 解決與代碼的問題
即0的一周裡那麼直觀。
你還記得手機 書實施例，其中
我們使用了分而治之， 或二進制搜索算法，
通過一個整體進行篩選 一堆的名稱和號碼。
但是，我們認為，召回，這是 電話本已經被排序，
別人已經 想通out--給出的名單
和numbers--如何按字母順序排列它們。
而現在，在C我們， 也有能力
打好東西出來，不 物理在電話簿
但幾乎​​在一台電腦的 記憶，我們將能夠在下週
到this--第一次推出 在一個array--我們的數據結構的
但更重要的是，實際的計算機 科學的算法實現
在代碼，與我們可以存儲 在這樣的結構數據，
然後開始操縱它， 真正解決問題呢，
並建立最重要的是， 最終，在C程序中，
在Python，JavaScript中， 查詢SQL數據庫？
>> 我們將看到所有這些 不同的想法互鎖。
但現在，記得 我們今天介紹域
是這個東西在這裡，和 世界加密的。
而接下來的問題，你自己之間 將解決是密碼學的藝術，
加擾和解擾 信息，和加密
和破譯的文字， 並假定最終
你現在知道什麼 是引擎蓋下
所以，當你看到或收到 這樣的消息，你
你自己可以破譯它。
所有這一切，以及更多下一次。
>> [視頻回放]
>> -Mover剛到。
我要去拜訪 他的大學教授。
是的。
你好。
是你。
等待！
大衛。
我只是想圖 出了什麼事給你。
請，什麼事情都可能幫助。
你是他的大學 室友，不是嗎？
你跟他的時候在那裡 他完成了CS50的項目？
>> [音樂]
>> - 那是CS50。
>> 我喜歡這個地方。
>> -Eat起來。
我們走出去的企業。
>> [結束播放]