>> 羅伯：好吧。
歡迎到首節。
我搶。
>> 約瑟夫：我是約瑟夫。
>> 羅伯：所以我們將深入權利英寸
首先要說說 是電器。
所以希望你們中的大多數都 已經下載了它。
但是你可以看到指示 在cs50.net/appliance。
哦，上帝，現在我的自我意識。
我還聽到它。
>> 約瑟夫：哇，這聽起來像 它的暈頭轉向。
>> 羅伯：所以有些人一直有 與它的問題，所以不要等到
問題的最後一分鐘設置為 試圖解決的電器和
找出它不工作。
>> 約瑟夫：如果有什麼不工作 而你需要幫助，你可以去
cs50.net/discussion我們 有一個論壇，在這裡你
可以發布您的問題。
我們會得到他們最終。
>> 羅伯：好吧。
因此，這是什麼樣的電器 模樣。
再次，它只是一個完全獨立的 操作系統內運行的
無論操作系統你 在筆記本電腦上運行。
和主就是你 使用是gedit的。
所以希望這已經 成為一個熟悉的網站。
該終端。
>> 你也可以運行Chrome瀏覽器 內的電器。
曾有一對夫婦的人 誰曾報導互聯網
在設備無法正常工作。
其中一些剛剛假設 有是不應該
網絡中的設備。
但是，是的，還有被認為 是互聯網。
>> 我會說出來的權利，但它不 真正意味著什麼。
如果網絡不能正常工作， 這就是你往往需要
運行修復它。
如果您有互聯網的問題，不 記住它，只是它張貼在
討論，我們會說，運行。
但互聯網應該是工作。
>> 所以，唯一的其他東西 - 是啊，沒有什麼 別的是真正相關。
但我只是想指出 -
請參閱本右下角。
所以，你的每一個設備的應 有一個IP地址。
後來在這個學期，該IP 地址將變得更加重要時
你的工作在網絡上對集，因為 你就可以訪問
網站，你正在努力從你的 當地的Chrome使用此IP地址。
>> 但我喜歡用的IP地址 為 - 和你沒有做到這一點，我
只是想指出來 -
就在這裡。
所以這是一個終端窗口 我的Mac，這不是在
電器都沒有。
並且你可以看看是什麼 這個命令的作用。
但我直接去的SSH 我的電器。
我不知道IP是什麼。
>> 約瑟夫：168 -
>> 168.224.1.0。
>> 羅伯：所以一旦我受夠了 與此，請登錄。
現在，基本上，這是相同的 我的電器內的終端窗口。
所以，我幾乎從來沒有真正的工作 從設備本身。
我只是一直有它運行 在最小化的背景
並SSHed進去。
>> 這個問題是你不打算 能夠容易地用gedit
直接從本。
但是，如果你想成為一個真正的酷 黑客，那麼你應該習慣了一個
命令行的文本編輯器呢。
所以Vim和Emacs和納米，所有這些 有不同的選擇。
納米往往是最容易的。
而且我認為它沒有 語法高亮。
哦，不，完全不會。
所以你可以使用納米，因為 那一個是很容易的。
>> 你看到所有這些命令 在底部。
這個小胡蘿蔔象徵。
如果你以前沒有見過它，你會 可能看到了很多了。
這通常意味著控制胡蘿蔔， 喜歡你的鍵盤的左下角
控制字符。
所以在這裡它告訴我到這裡 -
哦，這不是斷我是否放大。
所以，控制，X是如何 我要退出。
和它說我打的Y 是的，對於節能，N代表號
所以這是納米。
>> Vim和Emacs往往是稍 複雜的和壓倒一切的。
但是你可以習慣它， 然後你會愛上它。
所以，就是這樣。
>> 約瑟夫：沒必要那樣做。
>> 羅伯：是啊。
你可以自由地用gedit的 其餘的學期。
所以任何設備相關的問題？
還是你有什麼別的什麼想法 必須談及有關
家電？
是。
>> 揚聲器1：當你SSHed到您的 的事情，是密碼深紅？
>> 羅伯：是啊。
對於幾乎所有的密碼 在電器是怎麼回事
是深紅。
>> 揚聲器2：安裝像一個真正的IDE 在設備上，將它的工作？
>> 羅伯：我想像的Eclipse確實有 Fedora的版本，在這種情況下，是的，
你可以做到這一點。
它可能不是真的值得。
>> 揚聲器2：確定。
所以它可能如果我想更輕鬆 使用Eclipse，只需使用原生和
然後上傳到 -
>> 羅伯：哦，那也是可能更容易。
但你可以得到它的工作 內的電器。
>> 約瑟夫：而對於攝像頭的問題 是，你可以安裝另一個
IDE中的電器內？
>> 羅伯：Eclipse中作為一個 例如一個IDE的。
任何其它電器問題嗎？
好的。
>> 所以我們現在進入到命令行 接口相關的東西，所以CLI。
又一次，我只是去上班的 在這裡，因為這是相同的
在一個終端窗口工作 內的電器。
是如何形成的字體看？
是否足夠大？
好的。
>> 所以有很多的命令是 你應該得到很習慣
整個學期。
大二用於導航的LS，列表 此目錄中的文件;和
CD，所以更改目錄。
這樣我就可以改變桌面，然後 一個很常見的模式是cd到一個
目錄並立即LS 什麼的在目錄中。
>> 人們有時也沒有意識到 該選項卡完成的一件事。
因此，像CD，VH，然後我打標籤。
我幾乎從來不打出來 整個事情。
然後，如果我繼續打標籤 再次，它會自動
開始我列出。
所以我可以cd虛擬主機，本地主機。
而這只是要 -
如果你還沒有聽說過這個詞 之前，目錄是另一個字
為文件夾。
所以，現在如果你看 -
讓我們把那個頂端。
>> 所以，現在，如果你在括號中看到的，你 看到小波浪線，斜線，虛擬主機，
斜線，本地主機。
所以，波浪，是指 我的主目錄。
這是你的目錄 當你通過SSH連接。在
這是你在當目錄 你打開一個終端。
這是你從哪裡開始。
所以我為我的主目錄裡面， 而我的虛擬主機裡面
我的主目錄的目錄中。
然後我在本地內 主辦這裡面的目錄。
>> 因此，一些其他的與CD有用的事情 -
或好，一般，所以總是點 指的是當前目錄。
鎘，點是一個非常值錢的命令。
但是，這改變的 當前目錄。
一個更有效的方法之一在以下方面 CD是點，點，這是
只是去了一個目錄。
>> 並注意，這些 -
我想說的別名，但這些 符號，點和點，點，這些工作
對於幾乎你的任何命令 將運行在想。
因此，像CD可能是在那裡你會 使用最多的，但這些都不是
事情剛剛CD理解。
這是相當多的東西你的整個 命令行了解。
很多程序可以理解 點與點，點。
>> 所以其他有用的 - CD，破折號。
所以這是要帶我去了 我是去年英寸目錄
所以有時候我會做這樣的事情， 哦，我的工作在這裡。
而我看​​到的東西一定誤差， 我會去通過去調查它
一些隨機的目錄裡。
我不知道這是否會 讓我在那裡。
它的意志。
於是我做我想做的事情 在此目錄中。
胡說，胡說，胡說，胡說，胡說。
我當時想，沒事，我想 回到我在哪裡。
CD，破折號，它帶給我的右後衛。
>> 所以，我要扔了很多 今天的這些你。
我不希望你記住 所有的人。
樣的，它只是知道 它們的存在。
再後來就當你喜歡， 嗯，我想回去
目錄我只是在，哦，等等， 類似的東西存在。
你不必只需鍵入 再整個目錄。
>> 約瑟夫：最終你會剛 一遍又一遍的使用它們，並且
它會變成肌肉記憶。
>> 羅伯：是啊。
我以前那麼如何說，那波浪 是你的home目錄。
所以我可以cd，波浪線。
但我什至不有 這樣做，如果我只是 -
我會回去的目錄，以便 這不是一個毫無意義的例子。
但是，如果我只是做CD，這也是該 一樣，去我的主目錄。
我做的命令，K.
>> 約瑟夫：您也可以鍵入清晰， 總之，它應該清除它。
>> 羅伯：我也想控制， L同時，這樣做了。
所以，很多不同的方式。
我覺得有一定的差異，其中 明確和控制，L將只
真的把它推到頂部， 我仍然可以向後滾動。
命令，K字面上破壞 一切，你
不能滾動備份。
最起碼，這是 它是如何工作的iTerm2。
我不知道其他的事情 -
哦。
>> 用ssh方式連接，所以如果你是在Windows上， 你將要下載的PuTTY
為了SSH，因為Windows不 有這樣一個內置的SSH工具。
從Mac電腦，你可以只是直接的SSH 從終端窗口。
確定。
有問題嗎？
>> 通過ls，所以一些習慣 大多數這些命令是 -
好了，我就做一個。
LS，破折號，L。
所以破折號，l是什麼，我們要去 調用一個標誌，LS。
和很多這些命令有標誌 您可以傳遞給他們。
所以在這種情況下，儀表板，l是一個標誌 告訴它給我一個完整的
所有的信息清單 這些文件。
>> 所以，我們在這裡看到，桌面是 在12:54更新於7月30日。
下載於9月6日修改。
這些都是當前大小和 這些目錄中的字節數。
您不必了解 所有這一切。
>> 這東西在左邊，這些drwx的， 這將成為更相關
以後當你不得不處理 -
有做誰擁有權限 來看看這些文件。
所以，如果你沒有上唯一的用戶 這台電腦，你就可以到
說好，我應該是唯一一個 可以看看這個文件，或者我
要允許每個人 看看這個文件。
所以，別人在我的電腦上 可以看看這個文件。
我什至不知道這是什麼 - 這是什麼呢？
>> 約瑟夫：我不太清楚，其實。
>> 羅伯：不知道。
>> 約瑟夫：但是，如果你不知道，有 您可以使用一個有用的命令
告訴你什麼裝置的輸出。
如果你的男人類型 該命令前 -
所以M-A-N。羅伯：男人。
這樣的人是另外一個 這是非常有用的。
和男人，LS。
因此，手冊頁，他們有兩個 命令，你將要使用
在命令行中，他們也有 功能，將有關
與C所以，你可以man -
我忽略3。
但3人的printf會帶來 了C版的printf。
但是，如果我只是做男人的printf，這是 要調出命令的printf
這種情況發生在命令行。
>> 這樣的男人，LS。
手冊頁可以很 鋪天蓋地。
在這裡，雖然，你會看到此房源 所有這些標誌的是LS
理解。
因此，如果我們去衝，l和 -
我只是要在你扔了。
但為了搜索，你要 先打問題
標記或斜線按鈕。
所以，兇多吉少。
>> 然後我就可以搜索 對於我想做的事情。
所以我打算削減為破折號，L。
而且它那裡。
因此，使用一個長列表格式。
這並不能幫助我弄清楚什麼 該特定列的意思，但我
假設在這裡的某個地方 它會解釋。
因此，使用手冊頁的任何命令 你不立刻明白了。
>> 我敢肯定，你甚至可以男人，男人。
在線給接口 參考手冊。
呵呵，最後一個是也許稍微 相關的是LS，破折號，。
所以請注意，如果我只是做LS， 我得到這五個文件。
如果我做LS，破折號，我 得到更多的文件。
所以，所有這些之間的共同點 新文件是事先點。
>> 因此，該公約是一個文件， 以圓點開頭的隱藏。
所以，你不希望看到這個文件，你 不想擁有它惹
您的目錄清單。
只有當你明確要求， 沒事，LS，破折號，，告訴我。
的一個代表所有文件， 包括隱藏的。
因此，一些其他命令。
哦，在這一點上的問題？
是。
>> 揚聲器3：當你做LS， 一，什麼是點，點？
>> 羅伯：哦。
所以，這就是我在說什麼。
這是同樣的事情在那裡 我喜歡的CD，點，點。
所以在技術上，點和點，點是 存在於每一個文件
所在的目錄dot文件指 到當前目錄。
所以，如果我的CD，點，我只是去 留在目錄中。
和圓點，圓點總是指 以前的一級目錄。
所以，如果我進入日誌和ls，破折號，人​​， 我會看到圓點，圓點。 cd到網點，網點
使我先前的目錄。
是啊。
確定。
>> 因此，另一個非常重要的 命令為rm。
所以，這就是我們要去 使用去除。
讓我實際上做一套 命令第一。
所以MKDIR。
MKDIR是你可以 創建目錄。
我會創建一個臨時目錄 並進入該臨時目錄。
和預期的一樣，它是空的。
但是，如果我LS，破折號，一個，我還有點 與點，點，因為點是指
當前目錄。
與點，點指 上一個目錄。
而那些將永遠存在，無論 您所在的目錄
>> 這是一個完全沒有必要的 命令，但觸摸。
我只是用它，因為它是 一個簡單的方法來創建文件。
所以觸摸，觸摸B，觸摸c是剛 要創建一個名為三個文件，
b和c是完全空的。
於是我點創建那些在 首先就是這麼說是RM
我們如何才能將其刪除。
所以，RM，一。
它會問我，取出 常規的空文件？
然後我會說是的。
>> 所以，如果我確實知道我要 刪除該文件，而不必是
提示，定期刪除空文件？， 然後RM，破折號，f為將成為
標誌，上面寫著，強制刪除而不 甚至促使我哦，是你
確定要刪除的文件？
是的，我敢肯定。
所以，RM，破折號，FB將只 做到這一點不求回報。
>> 因此，讓我們做一些更多的目錄。
MKDIR，TMP2，CD，TMP2， 觸，觸按B。
確定。
所以現在我想刪除 TMP2作為目錄。
所以，RM TMP2。
你不能刪除TMP2， 它是一個目錄。
因此，這裡的問題是，RM不 馬上工作在目錄上。
它只是意味著像文件 非目錄的文件。
>> 所以我們能做些什麼 這裡為rm，破折號，河
這表示遞歸，這可能 不是對你意味著什麼呢。
但是，當你到了遞歸， 這將意味著更多。
所以，RM，破折號，R，TMP2是要 遞歸進入該目錄。
於是陷入目錄TMP2？
是的，讓我們考慮這樣做。
難道我們要刪除TMP2 /一？
是。
難道我們要刪除TMP2 / B？
是。
現在，我們要刪除 目錄TMP2？
是。
所以現在的目錄 和裡面的一切
它已被刪除。
>> 有技術上的命令RMDIR 您可以用它來去除
目錄，但它僅適用 在空目錄反正。
並且一看就知道，我們只 再做MKDIR，TMP2。
TMP2，觸摸。
確定。
所以，如果我嘗試刪除dirtmp2，它​​會 說，目錄不是空的。
所以，我幾乎從來沒有使用remove dir命令無論如何，因為RM，破折號，
r會為其工作的空目錄 和非空目錄。
>> 還有，如果我不希望有 經歷了整個過程
降入目錄，並 刪除每個單獨的文件，RM，
破折號，RF，TMP2。
而現在它不見了。
>> 東西要小心 關於為rm，破折號，RF。
它讓我害怕，甚至鍵入它， 因為如果我不小心
按Enter鍵或東西。
所以，RM，破折號，RF，波浪會，不 提示我，F不提示
我，它會自動刪除 我的整個主目錄和
一切都在它。
所以，你可能認為這是 一個愚蠢的事情。
很好，它是。
>> 但它可以通過很容易出現 意外，如果說，我想刪除
我的斜線，虛擬主機目錄。
而就在快速打字， 我不小心這樣做。
這將遞歸刪除我的兩個 主目錄和虛擬主機目錄
這個特定的目錄中，僅僅 恰好不存在現在。
但是，這仍然會刪除 我的整個主目錄。
至少是沒有一個f， 它會先提示我。
我會想，哦，不，我 不想做。
但是，人們，斜線，包括 我往往會得到進
習慣總是RF-ING。
即使是常規文件，我可以只RM， C，我傾向於只RM，破折號，RF，C。
只是要小心，當你RF-ING。
>> 揚聲器4：什麼是c執行？
>> 羅伯：C被我說的是C文件 在此目錄中，即RM，C。
>> 約瑟夫：而更危險的是，如果你使用 一個明星，它是指在一切
的目錄。
所以我通常傾向於做是我會的 進入一個目錄，我想
除去在那裡的所有文件。
所以，RM，破折號，RF，明星。
>> 羅伯：是啊。
室，破折號，RF，明星。
>> 約瑟夫：如果你不小心 你在哪個目錄 -
我是不是臨時的，但我還是不小心 在我的主目錄，
然後我會刪除一切 在我的主目錄。
而我實際上做到這一點之前，和 我覺得你還是以前做過這
周杰倫之前做到這一點。
>> 羅伯：我不小心刪除 -
所以忽略該命令為位。
>> 喬瑟夫：不好玩。
>> 羅伯：所以在斜線bin目錄是一個 一串二進制文件，其中有會
熟悉的像鐺。
好了，鐺，基本上所有這些 我在命令正在運行的東西
線是在這個斜線bin目錄下。
>> 約瑟夫：像LS是在這裡。
>> 羅伯：那麼點，斜線，LS會 列出該目錄。
>> 約瑟夫：室也是在這個目錄中。
>> 羅伯：我不小心RM，RF，海關斌， 其中刪除任何命令我可以
可能是有史以來想要的。
然後我剛剛重新安裝 新的電器在該點。
>> 喬瑟夫：所以要非常小心，當 使用此命令。
>> 觀眾：[聽不清]？
>> 羅伯：是的。
這也是一個不好的習慣進入。
如果你注意到，我現在 -
好了，你不能看到，但 我使用zoom-in，也許可以。
所以，我現在根@設備。
所以jharvard是我們想要的用戶 你總是可以使用。
根是具有權限的用戶 做任何事情絕。
>> 所以請注意，當我jharvard， 如果我嘗試到CD -
什麼是目錄？
哦，根是一個很好的例子。
所以CD，根。
權限被拒絕。
因為如果我們看一下此房源 -
又一次，你不必 完全理解這一點。
但是這三個破折號都這麼說 沒有讓任何其他
用戶進入這個目錄。
並且該目錄恰好 由root用戶所擁有。
>> 所以，我其實jharvard無 一個誰不是root允許進入
這個目錄，這意味著我 會得到權限被拒絕時，我
試試cd到它。
所以，當我的根，我有權限 絕對做任何事情，包括
刪除重要文件 在電器和
毀掉整個事情。
>> 所以這是一個不好的習慣進入 只是四處遊蕩的
操作系統的根。
我反正做。
有問題嗎？
我會退出的根，留為jharvard。
確定。
>> 更多相關的命令。
所以，要回我們的溫度時， mv命令代表的舉動。
您可以移動。
現在，我們要叫它B， 所以現在它稱為B。
或者，也許我們要移動 B上漲一個目錄。
所以，現在這個目錄是空的。
我將回到我的主目錄， 我們看到，b為在這裡，因為
主目錄是從一個目錄了 是B曾經所在的目錄。
>> 還有CP。
因此，CP是複製的超級節， 點，文字。
我可以調用它s，點，文字。
現在我們有兩個超級節， 點，文字，和s，點，文字。
這也適用於目錄。
我RF，海關單個文件。
因此，CP -
好了，首先讓我們來試試CP，TMP，TMP2。
所以省略tmp目錄。
如此相似RM，默認行為 是對目錄不起作用。
>> 再次，類似RM，默認 行為 - 好，得到它的工作
使用目錄是一個，破折號-R的路程。
所以遞歸複製該溫度 目錄複製到TMP2。
所以現在我們有兩個tmp目錄和tmp2 那是不是有益的，因為TMP
是空擺在首位。
TMP2。
>> 現在，讓我們tmp目錄複製到TMP2。
而且我們看到，TMP2還具有文件 一，因為目錄和
一切的那裡面 目錄被複製。
而這可能有點幫助 如果說你的工作
在問題設置1 -
或者實際上，後來問題集 更為重要的，因為有
將一大堆 文件和事情。
>> 但你只是想，對於一個分裂 第二，你喜歡，沒事，我
要嘗試不同的東西。
讓我複製我的整個PSET1 目錄複製到PSET1備份，這樣如果
我最終搞砸的事情了，我可以 返回到我的備份目錄。
還有更合適的方法 版本備份你的代碼，但
這始終是一個快速的方法來只是讓 確保你有東西副本
那你要修改。
>> 所以迴聲也是一次性的命令 一種sillily將只打印到
命令行到底是什麼 你想呼應。
所以迴聲喜。
我們將只打印喜。
迴聲的hello world。
我們將打印的hello world。
這涉及到使用的時候你 啟動合併命令。
>> 再次，不要指望你完全 理解這一步，但它的
看到的東西。
然後，如果你對谷歌搜索的例子 或者你知道你想要做的
的東西，它可以是有益的。
因此，讓我們作為一個例子， 所以LS，破折號，L。
所以我在這裡看到的輸出 LS的，破折號，L。
我說好，我想 存儲到文件中。
所有在這裡的輸出，我想 投入到一個單獨的文件。
>> 比符號更大所以這一點 就是我們要去打電話。
我們的重定向 輸出到文件中。
讓我們把文件等等，因為這是 我往往會在調用它。
所以現在我們看到我們有一個 文件胡說就在這裡。
如果我打開它，我會看到它的 正是從這個命令的輸出
我只是跑。
同樣，你可以 -
如果這是輸出到一個文件中，這 從文件中獲得輸入。
什麼是命令，我 -
>> 約瑟夫：我想你可以用 少跌多，大概。
>> 羅伯：但如何只少廢話？
我不知道。
如果你進入這個場景，像 有pset時，它是很有用的。
>> 約瑟夫：你可以管成迴聲。
管道文件到回波看到它。
>> 羅伯：這是管道。
>> 約瑟夫：對不起。
>> 羅伯：好吧。
因此，這是輸出到文件。
這是從文件中獲取文本 並把它交給該程序。
而且你還可以看到這個傢伙。
因此，這是一次那種做兩個。
而實際上，我將介紹兩個新 命令只是為了它的使用。
>> 歷史是一個方便的命令，這只是 將打印出的清單
任何我曾經運行的命令行。
所以，我們在這裡看到的一切，我有 已經運行這整個時間。
大量的LS的。
>> 而另一個有用的命令是grep的那 其目的是為了在搜索
文字尋找模式，好了， 尋找任何你
希望它去尋找。
所以這裡一個方便的用途是，比方說 我們要抓住歷史。
我要尋找的命令 在那裡我 - 什麼是
有用的寶貝？
>> 約瑟夫：[聽不清]？
>> 羅伯：還是讓我們只是看所有 倒是，不管是什麼原因。
所以這是它的樣子。
而你也不必完全 理解這一點。
但這個想法是在這裡，歷史是給 相同的輸出它確實在這裡
在那裡它打印出整個 一切我曾經運行的歷史。
然後我們又路過那個 -
而不是將它打印到屏幕，這樣， 我們要傳遞給
命令grep的是尋找 字觸摸的所有實例。
>> 所以使用的這個組合 歷史的工具和grep，我可以看到，OK，
這裡的所有的命令，我曾經 運行，這裡是一個有點常見的一種。
我們是在底部。
並且它也給了我命令 我剛跑了有
在它的詞聯繫。
但管道是一個非常有用的東西 用於組合多個程序。
而實際上，這是為讓快捷方式 我歷史輸出到文件等等，並
讓我用grep使用文件等等 因為我想看看了。
所以管只是一個快捷方式 對於這兩個命令。
是。
>> 揚聲器4：[聽不清]？
>> 羅伯：是的。
什麼是 -
呵呵。
讓我們來測試一下。
所以，貓，狗，魚。
所以我想給grep。
短跑河，再次，將是 遞歸的，所以我想降下來
所有目錄。
我想遞歸的grep對所有 - 讓我暫時得到
這一點的方式。
不理我。
確定。
>> 所以我想暫時用grep的 這個詞的魚的所有實例。
所以在這裡我在做什麼是用grep搜索 遞歸的字魚。
和星意味著在所有的這些 此目錄中的文件。
因此，這給了我拒絕的權限， 因為這是不允許讀
特定的文件。
但它在文件中，測試中發現的魚。
>> 我也可以說，具體而言，我只 想看看在文件等等，在
這種情況下它不會找到任何東西。
我只是想看看在文件，測試。
它會找到魚。
這是一個非常有用的命令 要知道一般。
有一些替代品到grep 這被認為是更加
程序員友好的，但我傾向於 仍然依傍的grep。
有問題嗎？
確定。
>> 還有沒有其他的命令？
呵呵。
只是一次性的一個，我始終 發現很有趣的卡爾。
所以，當我在這個可愛的通知 全屏模式下，我沒有最喜歡
工具欄或任何東西。
所以，卡爾只是給了我一個可愛的小 日曆這是正確的
現在斷了，我假設。
但可愛的小命令。
>> 約瑟夫：這是[聽不清]。
你可能有其他的命令 看到包括鏗鏘而作。
我們就去了他們 後面更詳細。
但是，如果你已經工作 在PSET，你應該
熟悉這些。
>> 羅伯：好吧。
在命令行的東西有問題？
好的。
因此，讓我們進入到一些 C-相關的東西。
變量的數學。
確定。
所以就像我們有數學的划痕， 您還可以使用數學三中
>> 在我們到達那個完全， 這樣的變量。
請記住，當你聲明一個 如int X或浮動y，則變量
必須給它之前鍵入 變量名。
因此，我們已經看到了類型到目前為止是int， 浮點型，雙，很長很長，我
實際上不知道我們是否已經 看到這麼遠。
>> 還有一些其他的。
我們已經看到字符。
有短，這是喜歡它的 相反的很長很長的地方是
比小的整數。
我們也看到字符串。
那麼，什麼是特別的字符串？
為什麼我會說這是 不是很喜歡整型？
>> 揚聲器4：它並不真的​​存在。
>> 羅伯：是啊。
因此，我們有字符串的唯一理由 是因為當你這樣做
哈希，包括cs50.h.
我們會看到這樣的例子以後 - 哦，那不處理好 -
其中cs50.h正在做的事情 沿型的線
閃避，焦炭星，字符串。
>> 所以這是說，我們甚至不 知道一個char明星是什麼呢。
但是，這是說我們要的字符串。
任何你已經使用字符串，你的地方 可以用字符明星已，
這實際上是一個類型， 存在於C語言。
但我們會到達那個。
哦，它會馬上回來。
整齊。
>> 所以，同樣的事情與布爾 其中真假。
這是不是真的在C的內置型 相反，它只是，這是否有
零值？
然後，我們將只考慮 它是假的。
這是否有值 -
好了，這是否有任何 值不為零？
然後，我們將認為這是正確的。
所以，有一個為真，二是真實的， 任何非零為真。
因此，這些都是那些。
在聲明變量的問題和 變量類型和所有？
是啊。
>> 揚聲器4：對於長很長，在書中， 它說，它必須是long long int的。
但也只是很長很長的工作？
>> 羅伯：所以這些類型修飾符。
所以詮釋x。
所以我們也可以說無符號詮釋x。
我們可以說短詮釋x。
我們可以說，很長很長詮釋x。
但這些東西幾乎任何我 剛才說了，無符號整型，短整型，
long long int的，你可以擺脫 int和它只是假設
那你的意思是int類型。
所以無符號x，它只是意味著 -
你知道如何正常使用int， 你可以說x等於負3？
用一個無符號整數，你不能。
>> 約瑟夫：再次，對於攝像頭， 問題是，有什麼區別
長的長整型之間 和公正的很長很長？
>> 羅伯：是啊。
所以，我幾乎從來不會 寫的很長很長整型。
我會寫很長很長。
>> 約瑟夫：有問題嗎？
>> 羅伯：確定。
那真是太傻了一點提醒是如何 我們聲明一個變量並初始化
變量和聲明其他 變量和初始化
這一切在一個步驟。
變量如此的聲明和 初始化變量沒有
到，但可以在同一條線上。
>> 因此，我們有標準的數學運算符 你已經習慣了 -
加，減，除，次。
還有模，我們拭目以待。
沒有的話，至少在 C，一個內置電源
冪^操作符。
嗯，有一個插入符號運算符， 但它不是權力。
>> 約瑟夫：但它不是冪， 是。
>> 羅伯：不要使用插入符號 假定它是指
像方或什麼的。
所以有些事情保持 介意師。
我會受不了。
如此宣布初始化的答案。
所以，我們說浮動答案 等於1除以10。
打印答案到小數點後兩位。
>> 這就是這種東西，我 將男人的printf弄清楚，
這到底是什麼％，網點，2F是什麼意思？
而這只是意味著，好吧， 無視0.2。
和％f是用什麼 打印浮動。
0.2是說，複印件 浮到小數點後兩位。
所以這個程序有一個bug，你可能會 已經在一些見過這個
前政務司司長課程。
但是，什麼是錯誤？
>> 揚聲器5：零。
>> 羅伯：是啊。
所以，當我們說，答案等於 1除以10，我們想要的
回答是0.1。
但1除以10，圖1是 整數，10是一個整數。
所以當我們做一個整數除以 一個整數，我們要拿回
的整數。
因此，1除以10是0.1。
>> 因為它需要給我們一個整數， 它只是要扔掉
小數位，說 答案是0。
所以當我們打印的答案， 這將打印0.00。
>> 約瑟夫：而且，正如一個音符，它實際上 扔掉什麼後
小數點。
所以，如果你不是有6除以10， 你可能會認為它會給你
0.6，然後你會四捨五入到1。
但實際上，當輸入發生了什麼 任務，那就是它滴是什麼
小數點後。
所以0.6也變為0。
>> 羅伯：是啊。
我們會說截斷了點。
所以每當你強制轉換為int， 小數將被截斷。
因此，對於該修復 - 有 其實是兩個。
而我要做的那一秒，因為 這個是一個很容易修復。
>> 因此，一個解決辦法是使用浮點數 在分裂。
真的，你只需要 讓其中一人的持股量。
但它的有些只是更清晰 讓他們都浮在水上。
因此，1.0除以10.0是 劃分兩個浮點數。
因此，答案最終會被 一個浮點數，所以你會
正確打印0.10這裡。
>> 一些不工作這麼好 大約也就是，嗯，當然，這是很容易
夠轉換1至 通過使1.0浮動。
但是，如果不是我們有兩個整數 如int x等於1和詮釋y
等於10，然後我們想 以做X除以Y'
因此它是不容易的剛 做X.0什麼的。
>> 所以要修復被鑄造。
所以鑄件是用C來轉換方式 從1變到另一種。
因此，這裡，圖1是一個整數。
並把這個浮在眼前 它，我們是鑄造1為float。
所以這將轉換 在1至1.0。
這將轉換 在10至10.0。
>> 然後事情的行為類似於 我們只是表明以前的版本
其中，符合市場預期，我們得到0.10 它會打印。
我們可以做到這一點 變量，也。
所以我們可以說，浮x 通過浮動Ÿ分。
>> 約瑟夫：有問題嗎？
>> 羅伯：所以，就像在常規的數學， 我們有運算符優先級。
因此，在數學課上，你就更有可能 調用它的操作順序。
在這裡，官方用語是 運算符優先級。
但是，運算符優先級，或最 運營商，是你所期望的。
>> 所以，就像在數學，2次10 將要超過密切分組
這10除以2，然後2。
操作的順序，它會做2 次10，10除以2，然後
它會做20加5加2。
所以它的預期效果，您可以使用 括號把表達式分組。
你不能使用方括號 分組表達式。
是嗎？
>> 你居然能：喇叭5 只是回去一下嗎？
你可以投一個int為字符串？
>> 羅伯：那麼在C中，你可以投什麼 你要你想要的任何東西。
這並不意味著它是 一個好的事情。
所以，當你施放一個int到 一個字符串，即表示 -
我們將進入這個 更徹底 -
>> 約瑟夫：晚得多。
>> 羅伯：我不想很久以後說， 所以我試圖改變我的句子。
我們將進入它更徹底 以後如果真的是當你有一個
字符串變量 -
所以一個字符串可以是任意 長，對不對？
我們一直在說，一個int 四個字節和long long是八
字節和浮子是4個字節。
所以一個字符串，就像一個int，只有 一定數目的字節到它的。
而這將是四個字節。
>> 但一個字符串可以很 任意長，對不對？
等你好了世界上已經，如果這是10 字符或什麼的，這已經
將要在4個字節 我可以放入一個字符串。
所以如何將字符串真正的工作是， 他們是在內存中的字符串
被保留。
>> 所以在這裡，當我說串X 等於的hello world，X裡面是
只是說，哦，你好，世界存儲 在內存中這個特殊的地方。
因此，如果我們嘗試將整數轉換為 字符串，然後我們試圖解讀
內存部分隨機部分 作為一個字符串。
而且幾乎總是打破的東西。
>> 約瑟夫：但是，如果，混淆 您，我們將覆蓋它
更深入的後面。
>> 羅伯：是啊。
這就是你要去的地方 進入指針。
那就是顯著塊 二週課程的。
>> 揚聲器6：它的工作狀物體 在其他語言或不是真的？
>> 羅伯：那麼在其他語言中，對象 會使用指針來表示。
這是不一樣的東西，雖然。
有什麼想法？
>> 約瑟夫：號
沒有思想。
>> 羅伯：確定。
>> 約瑟夫：下一步。
>> 羅伯：剛去這一點。
好的。
所以模。
就像我們有加，減， 分裂和繁殖。
所以模是一個你可以 以前沒看過。
它只是說，給 的我的其餘部分。
所以55％10。
在做55的餘數 由10將是5。
所以55％10 5。
和3％5是3。
8％8將0。
16％15將是1。
>> 約瑟夫：有一點要注意這一點， 也就是它如預期可能無法正常工作
如果你使用一個負數。
因此，負5％​​4，有些人 可能會認為那就是 -
你會怎麼想負 5％4會是什麼？
>> 揚聲器5：一。
>> 喬瑟夫：所以有些人說的， 有人說消極的。
但是 -
>> 羅伯：我什至不會有 說其中的一個。
>> 約瑟夫：二，對不起。
有人說 -
>> 羅伯：三。
>> 約瑟夫：三？
>> 羅伯：負 -
究竟是什麼 - 負5 -
>> 約瑟夫：三，三，三。
抱歉。
因為模，通常，當你已經 看到它在其他地方，這通常意味著
返回一個正數，對不對？
>> 羅伯：所以當我們說數學，10％的， 他們往往想給你 -
如果我們國防部10，那麼我們預期 得到0到9之間的數字。
在這裡，這不是這種情況，你 將得到負數返回。
>> 喬瑟夫：所以負5％ 4將是負1。
>> 羅伯：但它是罕見的，你是MOD-ING 負數開始。
跳過此。
>> 約瑟夫：是啊。
>> 羅伯：MEH。
確定。
所以最後一件事要指出有關 彩車是它是一個危險的行為，
但花車是不是一個確切的 表示。
所以回到字節一遍，記住 那一個int總是有四個字節，一個
浮總是四個字節。
所以盧卡斯的例子是相當不錯的。
>> 因此，認為1除以3。
所以0.3333333。
如果我只有32位，怎麼能 我保存0.33333到底是什麼？
也許，不管什麼原因，你說， 好吧，好吧，讓我們只說
這個特殊的1011001，讓我們 只是說，應該是0.333333。
那麼，你只有有限數量的 這些位，所以這是不可能的
代表每一個浮點 鑑於只有32位值。
>> 嗯，這是不可能代表任何 浮點值給出無限 -
還有，由於位中的任何數量有限。
因此，這裡的問題是，好了，當我們用 打印到小數點後兩位，
我們沒有得到正確的答案0.10。
但引擎蓋下，它是真正 被存儲盡可能接近到
0.10那些位可以代表。
這是對下一張幻燈片？
或者，是不是？
>> 約瑟夫：是啊，就是這樣。
>> 羅伯：Blegh，blegh。
>> 約瑟夫：是啊，你可以只 拉筆記了一下。
>> 羅伯：我只是要放大 中的最後一個上。
哦，我的天哪，這是[聽不清]。
使數。
這就是將要打印 如果我們運行該程序。
並請注意，這不是一個真正的大問題 如果我們只關心像
兩到三個小數位。
像我們最初只印刷0.10， 這就是為什麼我們看到什麼不對。
但是，一旦我們開始漸入 確切的說，確切的數字，它是
代表，我們看到，它不能 完全代表0.1。
>> 在這裡，問題的一部分是喜歡， 沒事，這很好，但是，好吧，
首先，如果我們試圖做的， 答案等於等於0.1？
是要返回true或false？
因此，這很難說。
我認為它實際上可能返回true。
它會先 -
我不知道。
答案是，一旦你開始處理 與浮點值，你漂亮
很多不應該使用相等 因為這種不精確性。
>> 而對於所有你知道，它的百 小數位的
浮點無法 正確處理。
所以平等只會失敗，甚至 雖然數 - 如果你已經
用確切的數字，該數字應 已經完全一樣。
一切都結束了的像50的過程 使用這些浮動的計算
點值，誤差可以建立 起來，起來，起來，
事情就出錯。
>> 約瑟夫：還有一直很 這種情況發生的著名的例子。
像美國航空航天局的工程師們獲得這樣的 錯了，造成火箭爆炸的
他們已經發動後的空氣。
和很多類似的問題。
所以，是的。
>> 揚聲器6：當你說0.3樓 它截斷的休息嗎？
抑或是一輪上漲或下跌？
>> 羅伯：請問printf的圓嗎？
>> 約瑟夫：我認為printf的截斷。
>> 羅伯：確定。
所以，我們同樣可以走向反面 這其中的方向，在這種情況下，
它可以代表最接近 0.1是用這個號碼。
它或許能在最接近 表示0.2是在相反的
方向，0.199999996356 什麼的。
所以，如果我們去的那個方向 的東西，然後printf的0.3 F.將返回
1.99，而不是2.00。
>> 約瑟夫：我也完全不 確定這一點。
你可能想要寫一個小的，小 程序只是檢查。
>> 羅伯：雖然，我們所肯定的是， 如果你試圖強制轉換成一個
int和鑄造為int是要 導致它截斷小數，如果
您嘗試轉換1.9999999 為int，您將獲得1。
所以你通常應該使用 輪函數的數學函數庫。
有問題嗎？
確定。
>> 喬瑟夫：所以，移動到條件 和布爾表達式。
所以，你以前見過這些。
而實際上，讓我確保我 電腦是正確的格式在這裡。
空間。
對不起，我們將不得不面對一個 與截止點點的邊緣。
>> 但是，是的，你們已經看到 這之前，在划痕。
所以這裡這個權利是一個表達式 這是用來在
一個條件語句。
所以回答大於零的意志 告訴你，真或假。
這些都是非常重要的，因為 他們允許我們介紹
邏輯到我們的代碼。
>> 因此，例如，這是一個程序 寫在刮，要求用戶
為一個整數，並告訴他們是否 整數，他們給你是一個
正數或負數。
和轉換在這裡看到的是 你先打印出報表，
給我一個整數。
然後你問他們一個整數。
>> 然後使用條件邏輯在 在這裡，檢查該號碼是否
實際上比為零或不大於。
所以在這裡，我們有一個布爾表達式 裡面的條件If語句。
有什麼問題嗎？
是否有關於什麼問題嗎？
確定。
>> 因此，有不止 比，當然，更大。
你可以構造布爾表達式 使用大多數的各種各樣的事情你
會想到數學。
因此大於。
這應該是一個小於。
抱歉。
和間距。
>> 羅伯：上帝保佑你離開它。
>> 約瑟夫：好吧。
這樣比，小於，大於更大 大於或等於，小於
大於或等於。
我們使用雙等號檢查 平等，因為單等於手段
分配，對不對？
是。
然後我們也可以不等於由 使用感嘆號，等於。
>> 而這個感嘆號符號可以 也可以擴展，這樣，如果你​​想
顛倒任何形式的布爾 表達式，你可以做到這一點。
因此，這將評估為true 只有當回答為少
大於或等於零。
上有問題嗎？
確定。
>> 所以，你也可以將這些 使用邏輯與和表達式
邏輯或。
所以，這只是和符號， 這應該是平移，7。
這是管道符號，這是 不是小寫L.這是一個
這是正確的上方的Enter鍵。
所以你使用其中的兩個象徵 邏輯的邏輯或。
>> 因此，這將只返回true，如果答案 是一個，兩個，三個或四個。
這將只返回true，如果答案 超出該兩側。
所以它不是一個，兩個，三個或四個。
並且你會使用的方式 在一個表達式 -
>> 羅伯：或零或五。
>> 約瑟夫：零或五。
抱歉。
是的，是的，是的。
確定。
而在這裡現在，同樣的方式，你 將使用該表達式，一個較小的
的如果條件表達式側 聲明中，你也會使用它
同樣的方式通過只把它的內部 If語句的括號中。
因此，這將printf的只有火，如果答案 是一個，兩個，三個或四個。
結合上有任何問題 表達式？
>> 因此，有另一個條件 構建體，我們稱之為一個if / else語句。
所以基本上，這意味著現在好不好，如果 我想要的東西，檢查是不是
真的，然後去Else和 執行其他動作。
因此，在這種特殊情況下，我問 用戶的一個整數。
是大於零的整數？
是嗎？
好吧，那麼他們選 一個正數。
如果沒有，那麼它必須有 是負或零。
所以，你選擇了一個負數 或者在此情況下為零。
是。
或零。
>> 然後我們也有if / else語句， 如果和其他人。
因此，這可以讓我們執行的順序 事情只有首當其衝失敗。
因此，在這種情況下，我們現在正在做的 最後一個你挑為零。
所以，如果他們既不挑了積極的，也不 一個負數，那麼他們必須
紛紛拿起為零。
因此，它只是下降的 鏈條是這樣的。
>> 如何在這樣一個例子 如果是從不同的 -
一個if / else語句是不同的 只是一個序列IFS的。
這是一個常見的問題， 人們問的是，好吧，如果你得到一個像
95 CS50，又會此 程序告訴你嗎？
>> 揚聲器5：你有一個A。
>> 約瑟夫：是的。
你得到的每一個 其中的一個權利。
你有一個A，你有一個B，你 得到了一個C和D，對不對？
因此，所有這些得到評估 為了。
因此，雖然95大於90，它的 比80也更大，這也是
大於70，它的 也大於60。
所以，你得到了所有這些成績的。
我相信，你會 只希望A。
>> 要解決這一問題的方法是更換 那些否則/如果的。
所以在這種情況下，它看到的是95 大於90，然後它
不評價其他地區 的語句。
關於什麼問題嗎？
>> 因此，有另一個條件排序 結構，我們在這裡，我們
調用一個switch語句。
因此，這可以讓你基本檢查 怎樣的一個數字，你把價值
進入switch語句。
所以在這種情況下，我們切換 於n，和我們說，哦，如果n為
一個，然後打印該報表。
再突破，這意味著退出 出了switch語句。
>> 如果它不是一個，那麼，很好，只是 最後檢查所有的這些情況。
所以它會檢查是否它的一個或兩個或 三，它打印相應。
什麼這個默認的關鍵字到這裡 方法是，如果他們沒有進入任何
那些，然後說無效。
因此，讓我們說，我問n和 用戶給我四。
那麼，它沒有匹配的那些情況下， 所以它會打印出什麼在
默認段。
是的，質疑？
>> 揚聲器5：你可以使用布爾 表達式代替
一個，兩個，或三個？
>> 喬瑟夫：所以，問題是你能使用 布爾表達式，而不是一個，
二，三？
而在C中，我相信你 不能做到這一點。
但在其他語言中，你可能會 在遇到的結束
學期如JavaScript，你可以。
那麼，你就必須先計算 該值，然後使用它在
switch語句。
是嗎？
>> 羅伯：開關部分的利益所以 報表是想，如果你這樣做
作為一個if / else語句，所以如果n等於像 等於一個或什麼的。
其他/如果n等於等於二，什麼的。
其他/如果n等於等於三。
這樣的方式，程序將運行的是它 會按順序往下走的列表
並檢查是N嗎？
不。
為n 2？
不。
為n 3？
是啊。
做到這一點。
>> 而用switch語句，它的 居然能夠編譯它是
真快。
而一旦它說開關，它 說，沒事，n為2時，我
馬上要跳的地方 我應該開始執行。
我不會先檢查， 為n之一，N雙？
它可以立即開始做 什麼是應該做的。
>> 正因為如此，它不能 採取布爾條件。
否則將不得不這樣做的 順序一樣，所有的權利，為n
大於零？
否則為n大於10或任何更高。
>> 約瑟夫：在這種情況下，如果你使用 if / else語句，如果的，則開關會
運行約3倍 比的if / else，如果速度更快。
我們可以組織開關在這樣的 我們不分手的方式
之後每個案件。
因此，在這種情況下，我分隔 我們選擇到一個和數字
兩個是不高的數字和 三位的是大量的。
>> 因此，在這種情況下，如果n是1或2，它 會打的情況下，然後它會
告吹，因為 沒有休息。
它會在這裡結束。
因此，如果我們挑一個，它會做的printf 然後突破，這樣的無
這被執行。
當然，如果他們在三個進入 還是其他什麼東西，然後它會跳過
這些，而不是去那裡，它 將執行的，而不是
相應的行。
是否有關於什麼問題嗎？
是嗎？
>> 揚聲器4：你會得到一個錯誤，如果你 有情況下，一前一後休息，但它
沒有東西給它做？
>> 喬瑟夫：所以，問題是，你會得到 一個錯誤，如果你有後休息
案例一但有什麼可以做？
答案是否定的。
你不會真正得到一個錯誤。
是啊，毫米嗯。
>> 作為排序的那麼一點點這裡的變化， 我打算把一個printf這裡。
哎呦。
那麼，什麼會這樣，如果打印 我把一個在輸入？
是啊。
它會告訴你，它沒有考慮 高數的兩倍，對嗎？
因為它會打的第一種情況下， 它不會打破，一下子就摔倒
通過向所述第二殼體。
關於什麼問題嗎？
>> 羅伯：你有別的問題？
>> 約瑟夫：好，冷卻。
好的。
因此，有我們所說的別的東西 三元運算符這基本上是一個
替代語法幹嘛 如果再別的。
它可以讓你做這一切在同一行。
所以這個特定的程序中， 我問n的用戶。
如果n大於100時，我告訴 他們，他們選擇了一個高的數字。
別的我告訴他們，他們 挑一個低的數字。
>> 因此，我們可以用這個很長的語法， 字符串，S，然後檢查是否n是
大於100，並分配 它相應。
但是，我們可以讓這個更簡潔 通過使用這個三元運算符語法
其中涉及的問題 標記和一個冒號。
所以問號本質上是 問一個問題，對不對？
>> 羅伯：或許放大了。
>> 約瑟夫：是的。
好點。
因此，這是三元運算符。
我首先要問的問題， 為n大於100？
如果是，那麼我執行第一 冒號前的部分。
如果不是，那麼我執行 在冒號後面第二部分。
因此，如果n大於100， 然後挑選高，看跌期權
那到字符串s。
如果n小於100，它選擇低 進而提出了到字符串s。
因此，將這種凝結大塊 成只是一條線。
>> 揚聲器5：這是流行？
>> 約瑟夫：是的，這是很流行的 那裡基本上你要的東西
做基於任務 某種條件。
在這種情況下，我們試圖 到一個值賦給字符串s。
這不是那麼 -
我想我真的不喜歡 但在其他情況下。
但它是特別有用 對於這項任務。
>> 羅伯：這是一個很常見的模式 在那裡你有一些變量，
你會說，如果事情，設置 該變量為一個值，否則，設置
此變量為另一個值。
那就是場景 其中使用三元。
>> 約瑟夫：你是在救 很多行，對不對？
它只是使你的代碼可以說是 更可讀的一點點。
是的，質疑？
>> 揚聲器6：對於三元，你能不能去， 字符串s等於S，問號？
然後你可以有，比方說， 五個不同的選項。
以及根據什麼n的數目 是，你會選擇其​​中的一個？
>> 喬瑟夫：所以，問題是，有沒有 排序語法，你可以做字符串
s等於n，並且隨後有兩個以上的 那個問號的選項？
而一個簡單的答案是否定的，有沒有 真是一個好辦法做到這一點，除非
要嵌套多個三元 彼此的內部運算符。
>> 你可以做如：n大於100， 問號，然後再
三元運算符中，n大於50， 問號，巢這種方式。
但在這種情況下，你的代碼是 得到一種不可讀和凌亂，
它可能是更好的只是去 一個if / else語句在這一點上。
>> 羅伯：還有，作為一​​個側面說明，PHP 不正確地實現了三元
運營商這樣嵌套的三元系 甚至不工作，因為他們應該。
>> 約瑟夫：是啊。
因此，它變得有點混亂， 尤其是當你去
以不同的語言。
>> 羅伯：這是迷惑，以至於 語言是錯的。
>> 喬瑟夫：所以其實只是為了澄清， 每個人都知道那是什麼
％s的確實在這裡？
關於什麼問題嗎？
我猜只是相機，％s的 基本上讓我們放一個佔位符
為一個字符串。
然後到了最後，我們指定的 變量，我們希望把這個
佔位符為s。
所以，基本上需要s 它把它在這裡。
然後它會打印出來，你挑 高或你選擇了一個低的數字。
確定。
>> 所以循環允許你執行的事情 在打圈，對不對？
你可能會在遇到此 在從無到有的永遠的形式循環
或重複，直到或重複特定的 的次數。
那麼，為什麼這是對我們有好處？
那麼，在C中，假設我們有這樣的 在刮歌實施了
唱歌，這是歌曲 永遠不會結束。
它只是和和 永遠，永遠。
好了，你真的不能讓一個程序 具有printf的無限數量的
在它的報表，對不對？
>> 因此，在這種特定的情況下，單程 您可以進行這項工作，
讓它永遠印是 而不是使用一個while循環。
因此，一個While循環將執行什麼 在兩個支撐體是
屬於它的依據是什麼 條件是。
因此，在這個特定的例子之前，如果 我們要永遠的打印本，有什麼
也許我們做什麼？
嗯，當然，對不對？
>> 所以，這樣的結合的想法 一些布爾表達式
隨著循環。
我們了解了布爾 表達式前面。
所以每當裡面的條件 這雖然仍是如此，這個循環
將執行上和和。
在這種情況下，如果我們只是提供了 與真實的，這將導致無限
循環打印出的歌曲，並在 和我們之前沒有期望
具有一個程序，有無限 的printf語句數目，這是
不可能的。
>> 所以更令人信服，不過， 你可以使用這個用
變量和條件。
因此，讓我們說，我們要重複的 詞組，完全充滿循環，10倍。
所以，你可以用一個While循環做的是 你可以先初始化一個計數器
變量以外的 While循環到10。
然後基本上，每次你走 通過While循環，打印出
您降低語句，然後將 計數器變量，直到在最後，
在某些時候，當我們減去我不夠 次，1次從我足夠的時間 -
而只是為了澄清，我減減 意味著我等於I減1。
>> 這將基本上把我下到 點，一旦我打零，這
條件不再真實， 所以它退出圈外。
所以完全充滿循環只打印10倍。
關於While循環有問題嗎？
確定。
>> 因此，有一個辦法，我們可以做什麼，我們只是 在一個更簡潔的方式與做
我們所說的For循環。
因此，一個For循環由一個 初始化的狀態下，和一個
更新，就像我們以前有 在這個While循環。
因此，讓我們一起來看看。
在這個while循環，我們有 初始化，然後我們有一個
調理，我們檢查。
然後我們有一個更新 步驟在頂部。
>> 在fo​​r循環中，這主要取 這三樣東西和它凝結
成一行。
因此，它確實在的第一件事 for循環的初始化。
然後，你做一個分號，然後 你做的條件，這是我
大於零去那邊， 然後在更新步驟。
因此，這被在執行 循環體的最後一刻。
所以，這兩個程序是 基本上是等價的。
>> 有問題嗎？
那麼，什麼是一個區別 這兩者之間？
任何人都可以指出來？
它可能是一個有點微妙。
這只是一個非常小的差異。
是嗎？
>> 揚聲器5：您將無法使用 For循環外的我變
[聽不清]？
>> 約瑟夫：沒錯。
所以，這是我們會得到 後來被稱為變量的作用域。
但本質上，這種詮釋我的生活 這個while循環之外。
所以一旦這個while循環完成 執行時，我就可以在以後使用我
在該程序。
>> 而用這種For循環，這個INT I 作用域是這裡面的for循環。
並且，因為它是該部分的內 For循環，即啟動
在括號和結束 大括號那邊。
這就是內聲明的任何事情 這裡不能被外部使用。
所以，如果我嘗試使用外我，它會 告訴我，未申報的象徵。
而且基本上，我不會 能夠使用它。
>> 羅伯：和好了，10年前，在 從字面上所有的情況下，大括號
你用什麼來確定 一個變量的範圍。
所以在那裡，INT I等於10 這裡面聲明
設置大括號。
所以這時只要您嘗試使用我 這個大括號之前，它的罰款。
當你鍵入make您可能會看到，你 看破折號，破折號，標準，等於和C99。
>> 所以這是C以後的版本， 海灣合作委員會已實施也給
此快捷方式。
因此，這用於不能在C.允許和 你可以看到為什麼，因為這個整數
我是這個大括號之外，但 它仍然被認為是在
這些大括號的範圍。
但是，這是一個非常方便的事情， 所以它是一個很好的延伸。
>> 約瑟夫：有問題嗎？
確定。
那麼什麼是更有益的是，有時 你想在那種活力
你的循環，對不對？
你不想只是必然打印 完全糊塗的所有的時間，你
要從倒計時 10什麼的。
所以你可以使用計數器變量 那裡面循環的為好。
在這種情況下，本程序只是 倒計時從10一路下跌下來。
它有什麼不能打印？
它不打印零， 沒錯，因為當 -
是的，它也不會打印11。
>> 因此，它不打印零，因為當 我是零，請記住，它會評估
之前那張條件 執行循環體。
當我是零，這是假的，所以 它不會打印出倒計時
零，它只是打印出票 跌10一路下滑至1。
如果我們真的想要它打印為零， 然後我們會把等號
比後簽訂本更大。
確定。
>> 因此，一個辦法做到的輸入驗證，這 是當你問用戶做
什麼，你要確保他們 按照您的指示，是使用
While循環，對不對？
因此，在這種特殊情況下，我在問 為正數，那麼我
等待輸入。
>> 然後我檢查而輸入 小於零，不斷地問他們。
所以只要他們給我一個號碼 這不是積極的，不斷地問，
不停的問，不停的問。
但是，什麼是有點兒奇怪這件事？
或似乎有什麼不理想有關 這種結構在這裡？
任何人嗎？
是嗎？
>> 揚聲器6：你重複 該指令的兩倍。
>> 喬瑟夫：對。
因此，我們有兩個printf語句 在這裡，對不對？
因此，有一個辦法，我們可以得到這個剛 下降到一個會令我們的
代碼更易於閱讀和 更乾淨一點。
然後我們就不必 已取得在兩次為好。
你也可以做到這一點的方法之一是 通過使用一個do-whil​​e循環。
>> 和do-whil​​e循環基本上是一個 不同形式的While循環在哪裡
無論是在大括號內 被至少執行一次。
所以在這裡，我宣布，整型 輸入外第一。
然後，我只是說，這樣做 指令同時輸入
小於零。
所以，它擊中先做。
它總是至少執行此 一次，所以它總是會詢問用戶
對於至少一次輸入。
然後它計算的輸入， 並且它繼續了一圈。
是的，質疑？
>> 揚聲器6：有沒有辦法做到這一點 [聽不清]的類型，如果你說喜歡，
GetString的，有人[聽不清]
是有辦法[聽不清]
>> 喬瑟夫：所以，問題是，有沒有 這樣做的輸入驗證，如果用戶
不把正確的 變量的類型？
因此，如果我們要求一個int和他們 給我們一個字符串來代替。
而在我們實現的功能 對你來說，調用getInt是，GetString在所有的
這些功能，他們實際上已經 做那種基本類型的輸入
引擎蓋下驗證。
所以，如果你正在使用的功能，我們 給了你，你真的沒有來。
>> 但是，如果你想看起來更探討如何 你其實可以做到這一點，你可以看看
罩在文件下I/O--
不是一個文件，標準I / O函數 像一個從標準輸入讀取和
標準輸出。
你可以得到一個更好的感覺 您可能如何做到這一點。
>> 羅伯：有一個問題，雖然是專門 用你的例子
說，你期望一個字符串 而我進入一個int。
你將如何分辨 故意想要的
串123對想要整型123？
這樣的字符串，它幾乎沒有 驗證，它只是不管他們
進入你將圓夢 作為一個字符串。
>> int是比較容易的，因為不管 輸入你從用戶，你是
始終以一個字符串。
所以該字符串就可以再 檢查一下，是所有這些
實際上位數字？
>> 約瑟夫：確定。
大約一個do-whil​​e循環有問題嗎？
>> 羅伯：哦，這也是 -
回去範圍，一個比較常見的 錯誤是試圖用一些當地的
從這個的do-whil​​e中變量 循環的這種情況下的內部。
而實際上，如果我們只是擺脫了 這一點，並說，INT輸入等於
調用getInt，那麼編譯器會罵 我們，因為輸入不存在
的範圍之外的 這些大括號。
>> 約瑟夫：這就是為什麼我們 需要這樣的陣容在這裡。
確定。
所以你也可以打出來的 循環初期，如果你想。
所以這是一個不同的方式 實施我們剛剛實施。
和，而不是使用條件 在括號內，我們使用了
如果身體的內部表 在do-whil​​e循環的。
>> 基本上，當輸入最後 大於零，我們將
跳出循環。
因此，我們將全力以赴 一路下來這裡。
而且你可以看到這會 可能是優選的這
情況下，因為它是一個小 有點清潔和一點點
位更容易閱讀。
而這一類的，你 有多餘的線條在裡面。
這只是一點點醜陋， 我猜想，在某種意義上。
是的，質疑？
>> 揚聲器4：將僅獲得突破 你出一組大括號？
>> 喬瑟夫：對。
所以，問題是只破 讓你出一個循環的？
答案是肯定的。
所以，如果你有嵌套的For循環，對於 舉例來說，如果我有整型I等於0
直到10然後對於int j為0 直到10，如果我打出來的內在的
環，我還是會去 到外循環。
所以它會繼續執行 操作在外面。
關於什麼問題嗎？
是嗎？
>> 揚聲器5：但只有突破功能 對大括號，而不是其他
報表？
[聽不清]
>> 喬瑟夫：所以，問題是將打破 唯一的功能for循環，而不是
其他語句一樣，如果？
是的，是這樣的話，因為 你打破一個循環出來了吧，
在感。
>> 羅伯：在案件的絕大多數，這是 這是如果某樣東西的那種，
然後打破。
所以，你不必打破申請 的如果是環繞著它。
而且，這並不是太大的環， 但請記住，開關也
通過斷裂破碎出來的。
我們看到正在使用的中斷 與切換前。
>> 約瑟夫：你也可以使用它們 在While循環和for循環。
有問題嗎？
確定。
所以，接下來是功能。
所以，你可能已經使用了這些BYOB之一 塊，將刮項目。
這基本上可以讓 您可以定義一組
指令被執行。
>> 而我的意思是讓我們覺得 回到數學，右，代數。
你有什麼我們稱之為x的函數， 一些變量，並假設本
函數是f的x等於x加5。
所以，你能想到前後x的，因為這黑色 框取15，然後
生產20。
>> 所以更一般地，一個功能是 的東西，需要一些投入和
然後產生一些輸出。
以及為什麼是功能好？
他們是很好的為一定數量的原因。
因此，沒有人想採取刺 在組織什麼意思？
在為什麼功能方面都是有幫助嗎？
是嗎？
>> 揚聲器4：它使你的 代碼更具可讀性。
>> 喬瑟夫：對。
這樣的事情之一是它使 你的代碼更易讀，對不對？
而不必像詮釋x等於x時 次x次X，我可以得x的立方，
這是更具可讀性，更 可以理解的讀者。
>> 組織也是來講 把您的代碼轉換成可管理的
部分，因此，與其試圖 實現這一切在一個長款
在主，你可以有點分裂它 成想，好，讓我們寫一個函數
多維數據集的東西，讓我們寫一個 功能為方形的東西。
這樣，你可以把它分解成微小的， 小部分，你可以解決
而不是試圖解決 一個很大的問題一下子。
>> 羅伯：甚至微小的，小零件 你和你的伴侶可以解決。
>> 約瑟夫：是啊。
>> 羅伯：所以不是兩個 你想植入1
功能的同時。
>> 約瑟夫：簡化。
有人想以此來猜測？
是嗎？
>> 揚聲器5：更多的重複。
>> 喬瑟夫：對。
這樣一件事，你可以做 簡化是它的排序上
相同的線作為可重用性是 有一次我寫一個立方體函數，我可以
剛剛使用過，並一遍又一遍 又在我的程序，而不是打字
x次x次x在和 一遍又一遍。
和簡化在這裡也只是 意味著它使你的代碼排序
一旦你分割更容易調試 這成函數。
因為這樣你可以在那裡本地化 排序您的問題。
有問題嗎？
>> 所以另一個想法是抽象的，對不對？
這個黑匣子。
就像你知道什麼調用getInt呢 以接收來自用戶的輸入？
我們還沒有真正告訴你，對不對？
所有我們告訴你的是調用getInt呢 正是它說，它的作用。
所以，即使我們不告訴你如何 它的工作原理，你還是知道的。
>> 因此，在這種特殊情況下，這是 四重功能，不
不同的東西來輸入 以產生一個輸出。
而且你可以翻兩番一個數字 通過將其乘以4。
或者您也可以就是我們所說的 位由兩個移動它。
我們將討論這 一點點後。
而且也沒有必要知道如何 函數實際上只要工程，它
誠如作品。
>> 於是在引擎蓋下，我可能是 像，返回輸入倍
8除以二。
而你不知道吧？
所有你需要知道的是， 它做什麼它說。
所以這是有用的東西 關於抽象。
>> 而另一件事是有點這樣的想法 定位你的代碼之一
特定部分。
所以，如果你有一個問題，你不 要走遍你的代碼試圖
解決那裡的問題。
因此，在這種情況下，我實現 立方體錯誤的。
我想多維數據集乘以 三。
>> 所以在這種情況下，這是一個程序 只是已經由三個相乘
無處不在。
而且，還有另一個計劃，有 保理立方體出成一個函數。
所以現在如果我想解決我的錯 在這裡，我必須要修好每一行
這個程序的代碼。
而在另一方面，如果我用 功能，我只需要改變
在一個地方發生了什麼事。
>> 因此，在計算機科學中，我們 調用的輸入和輸出。
輸入被稱為參數或 參數，並輸出被稱為
返回值。
我們將看到如何這可以幫助我們理清 在第二個定義一個函數。
所以這是一個函數定義 對於體積測量。
因此它需要一個輸入，然後 它返回一個數字時代
本身三次。
因此，讓我們打破這種分解。
>> 所以我們有一個函數頭，其中 基本上由三件事情。
所以，我們有參數， 是，正如我前面所說的，
投入到這個功能。
然後我們給函數的名稱。
在這種情況下，它被稱為多維數據集。
然後，我們指定哪些類型 的返回值是。
>> 所以在這種情況下，我的立方體函數 取入的整數，並且它也
返回一個整數。
所以，如果我通過在二，二是整數， 它返回八到我，這
是一個整數。
因此，返回類型名稱參數。
有關該問題？
>> 然後返回值實際上是 在最後說指定的回報
然後回到什麼 包含返回值。
因此，在這種情況下，如果我們把它全部 同時，一個函數接受
參數，這就是所謂的東西， 它返回的東西是類型
我們說這將是。
有問題嗎？
>> 那麼，我們如何使用函數？
好了，我們寫一個函數，然後 我們用它在我們的計劃，對不對？
所以我把它稱為多維數據集， 然後我可以使用多維數據集。
>> 但重要的是要注意 就是為了事宜。
如果我有以下主要的立方體，它的 要碰上立方體。
在這一點上，沒有什麼 所謂的魔方程序中，它的
只是要像，我有 不知道什麼是立方體。
>> 因此，它會告訴你，隱 聲明的函數。
這顯示了錯誤。
所以在這種情況下，立方體低於 主要的，所以它不會
來了解一下吧。
>> 揚聲器5：所以主要是通常 最後一個函數定義？
>> 喬瑟夫：所以，問題是， 是主要的通常是最後
你想定義的事情嗎？
並沒有。
這是因為我們通常喜歡主 要在頂部，對不對？
因為這是第一件事情你 希望程序員打開
程序，看看。
所以，我們如何解決這個問題，我們 想主要是在頂部，但
我們想要的功能，我們希望他們 將低於主還能夠使用
他們的主要內？
>> 好了，我們用我們稱之為 函數原型。
那麼，什麼函數原型本質 是被它首先需要什麼
簽名或函數頭 什麼我們要實現下降
在這裡，我們把它放在 一個程序的頂部。
>> 因此，在這種情況下，我們說，好了， 後來在我們的節目中，我們將
作出承諾來實現這個 函數調用整型立方體，這需要
一個整數輸入。
所以，現在，因為那是上面的主， 主要的，它會說，哦，好吧，
在節目後，也將是 有這樣我就可以參考它，所以我會
就讓它通過去現在。
>> 然後在底部， 我們實現的立方體。
然後主只想說， 好了，它會進行排序的鏈接
這兩個符號在一起。
我們將討論是什麼 意味著以後。
所以它會知道，這是 立方體函數，它應該使用。
>> 羅伯：在[聽不清]關於希望 主要在底部或
頂，我見過兩個。
有些事情，就像 把主要的底部。
但是，一旦一個項目獲得特別 大，平時主要是在
提交自己的所有。
在這一點上，如 整型立方體線會 -
stdio.h中裡面是一堆 就這樣整型行
立方體整型輸入線。
>> 等等這些原型都是你 往往投入的頭文件，在
這一點，也沒有關係。
好吧，沒關係。
那些總是在頂部。
如果主要不是一個文件自身所有， 你不必擔心這會讓
個別函數原型 在文件中。
>> 約瑟夫：我們會得到一個小 位後，當羅布開始談論
有關編譯。
所以還有一個區別 之間的參數和參數。
和參數正是 我們稱這些投入時
我們定義函數。
我們把它叫做一個參數，當我們 實際上它傳遞到函數。
>> 所以在這種情況下，這是一個參數， 正如我們之前所說的。
而當我們真正使用它在那邊， 的x立方體，那麼X本身是
我們所說的論點 該函數的立方體。
>> 羅伯：所以參數的論點是 -
有這種區別，很 交替混淆。
在這一點上，對我來說，它就像一個 那些話，當我看到它在
野外，我不禁馬上 質疑他們是否在使用它
正確的上下文，因為 差足夠細微，僅僅
每個人都傾向於 -
我幾乎總是說參數 不管我是什麼意思。
>> 約瑟夫：和功能也很有用 對於我們所說的副作用。
因此，一個函數可以不取輸入，並 它也可以不產生輸出。
因此，在這種特殊情況下，我 定義一個子程序，有沒有
返回值。
並且為了指定這一點，我們使用 我們稱之為無效在這裡。
因此該函數的副作用 是，它只是打印的東西
出到頁面中。
它實際上並沒有採取任何 輸入，並且它不
實際上產生任何輸出。
>> 但是這可能在這個意義上是有用 如果你想，例如，調試
東西在你的程序中，如果你想要 寫一點子程序
打印出來，讓我們說，內容 內存什麼的。
等等這些副作用是有時 上下文之外有用
只是想輸入和輸出。
有問題嗎？
>> 並結束這個特殊的領域， 這是什麼節目呢？
我給你們一對夫婦 秒讀通過它。
在一個非常基本的水平，我們要 說的是，它交換x和y，對不對？
>> 所以，你們有多少人真的認為 這將交換x和y？
舉起你的手。
沒有之一。
確定。
誰認為它會 不會掉x和y？
和該總和是 不是整個房間。
所以有些人不知道。
確定。
這是合理的。
>> 所以，讓我們通過會發生什麼時， 你實際上調用函數首先在
為了回答這個問題。
因此，這是什麼內存 那種樣子。
這有點像一個簡化模型 的記憶是什麼樣子時，
你運行一個程序。
因此，有一種叫 堆棧下來這裡
一種叫做堆。
而這些對成長 的存儲器的中間。
>> 因此，在這種特殊情況下，當 你調用一個函數，它
被放在堆棧上。
然後無論是包含在 功能停留在我們所說的
函數的堆棧幀。
等拿到一個不錯的可視化 對此，let's - 例如，我們有
程序主要更早。
和主裡面，我們稱之為立方體。
所以主要會先進入堆疊 框架，因為它是第一個函數
這就是所謂的。
>> 然後當立方體被稱為內側 主要的，它被放在主頂部
內的存儲器中。
所以，你會發現這裡是立方體 有它自己的參數和其
自己的本地人。
所以，當你真正傳遞的東西 一個函數，參數，它
得到是什麼副本 從主要的傳遞。
>> 和排序來解釋這一點，讓我們 走過一個程序。
因此，我們有棧，這是 只是部分堆垛。
而我們要做的是，我們首先初始化 x和y為一個和兩個。
因此，我們有這些小盒子。
他們坐在主的堆棧 框架堆棧上。
它們含有一個和兩個。
>> 現在，我們稱之為交換。
什麼情況是我們通過x和y成 掉期，掉期和創建自己的副本
這些變量裡面使用 它的堆棧幀。
所以，現在在那邊，我們有一個，這 包含x具有的值，以及b，
其中包含使y的值是。
這樣的一，二。
>> 而且你會發現，這是獨立的 從x和y的主內。
所以我們現在創建一個臨時的 變量包含。
我們設置一個等於b，那麼它 變化從一到兩個。
然後我們將b等於 到溫度，這是其中之一。
>> 然後現在我們退出了 這個功能。
當您退出功能的出去， 堆棧幀被彈出堆棧。
我們稱它推。
你推一個棧幀壓入堆棧 而你若彈出從堆棧中。
所以會發生什麼事是一切 是剛才那個堆棧幀排序
上升在火焰中。
所以不再存在。
>> 但是，我們注意到了嗎？
我們從來沒有真正改變 x和y的值，對不對？
所以那些地方呆主。
並通過傳遞東西掉期，我們 其實從來沒有改變這些值。
而我們稱這是什麼？
我們按值調用這個傳球。
>> 所以在C中，當你通過東西進入 功能，它通過它們按價值計算，
使他們的副本 該函數使用。
我們將了解一些所謂的 通過引用傳遞後，但是這
一種方法可以解決這個問題。
但我們不會擔心 那直到後來。
>> 羅伯：而實際上，這個詞，傳遞 通過引用，所以C甚至沒有
路過的參考。
Ç已經完全經過值。
不管你做什麼，你總是 路過的一些副本。
它只是說，像我樣的提 之前的指針
和一個字符串確實是只有四 字節指著某處在內存中。
>> 好吧，如果我有這樣的字符串，它的 告訴我，是其中的字符串 -
好吧，如果我有這個指針指向這個 放置在內存中，然後我可以通過一個
該指針指向一個函數的副本， 該功能仍然知道在哪裡
內存是。
所以，這兩個指針都指向 內存中的同一個地方，和
這就是我們要如何才能夠 修改以後的事情
當前堆棧幀。
>> 約瑟夫：你們想幹什麼編譯？
>> 羅伯：不，這是5:30。
>> 約瑟夫：確定。
它是5:30。
確定。
因此，我們將覆蓋編譯我猜 下一節，或者你的節
領導者會在這一點上。
和 -
>> 羅伯：有問題嗎？
>> 約瑟夫：有問題嗎？
是嗎？
>> 喇叭5：使用從CS50，任何字符串 我們要使用的功能
這些，那將是像C函數。
CS50並沒有消失在和 做任何額外的。
>> 羅伯：正確。
任何的C狀[聽不清]，您 會使用那些在我們的字符串。
>> 約瑟夫：最後一件事我想 一提的是，我們有一個風格指南
這個類。
>> 羅伯：哦，是的。
>> 喬瑟夫：所以，如果你來自一個 前編程背景，你
可能有一定的約定，當 你寫的代碼就像把
在同一行或特定括號 縮進方式
或命名變量。
在這個類中，我們要遵循 具體風格指南只是因為，
好吧，如果你出去工作的 行業，你會在意料之中
遵循的風格指南 公司在這你去。
>> 像例如，Facebook的我覺得 已命名的特定排序
約定。
還有的駱駝之間的差異 外殼變量和像
他們用下劃線分隔。
而且，我認為最重要的是，像 例如，壓痕，對不對？
>> 我們花括號開始的地方 的條件是，它們
是從下一行的。
而我們也把花括號中 即使是只有一條線。
而很多時候，有很多方法可以做 它在那裡你可以將這些括號
如果是只有一條線斷 下的If語句。
但在這個類中，我們要遵循 具體風格指南只是讓你得到
用之類的事情。
>> 羅伯：是啊，50款將要 執行本風格指南，我們很
要使用樣式50 分級代碼。
因此，它使事情變得更容易為我們和 希望不要把事情說
為你提供了很多糟糕的 標準化的風格不應該是
不現實的。
>> 約瑟夫：最後，找到風格 引導，去manual.cs50.net/style。
，是的。
>> 揚聲器4：你要強制執行 每行的所有字符？
>> 羅伯：是的。
>> 約瑟夫：對不起，伙計們。
>> 羅伯：這就像唯一的一個。
在這一點上，我與120確定。
我跟說120行 每行的字符。
據我所知，被一些限制。
我覺得80是如此之小，但 我們正在執行它。
>> 約瑟夫：我個人認為，用 C，80個字符是比較確定。
一旦你開始給其他 語言如JavaScript和PHP，不
所以合理的，只是限制 它為80個字符。
確定。
嗯，這是超級節。
有誰要糖果？
>> 揚聲器4：是的。