[音樂播放] DOUG LLOYD:好吧,讓我們 說說命令行參數。 因此,到目前為止,在使用過程中很 多所有程序 可能已經開始 像this-- INT主要無效。 我們一直在收集 如果我們需要用戶輸入 在我們的節目,如 馬里奧方案,例如, 在程序的提示。 修改我們沒有必要 主要的聲明, 因為裡面,而不是我們主要的 只是說,你可以調用它來獲得int類型。 如何大,你想要的金字塔呢? 或者你可以調用它來獲得 float--多大變化 我應該輸出給用戶? 還有另一種方式,雖然, 如果我們希望我們的用戶 要能提供 數據我們的計劃 在運行時,而不是當 程序運行, 一個微妙的區別,但 有時一個非常有用的, 我們需要聲明的主要的一種新形式。 我們不能使用int主要無效的,如果我們想 在命令行收集其他數據 當用戶運行該程序, 因此命令行參數。 為了收集這些命令行 來自用戶的參數, 改變你的聲明 主要的樣子this-- INT 主,開括號,INT ARGC,逗號, 字符串的argv,方括號, 然後打開大括號。 那麼,是什麼意思了嗎? 好了,我們傳遞兩個參數, 或參數,或者輸入為主。 其中一個叫整數 的argc,另一個是什麼? 這是一個字符串數組,對不對? 我們看到,方括號。 它是一個字符串數組。 它不是一個單獨的字符串, 這是一個字符串數組。 而這兩個參數,argc和argv, 讓你知道哪些數據用戶 在命令行提供 又有多少事情,他們 在命令行提供。 非常有用的東西的工作。 ARGC代表參數計數, 你應該知道,順便說一下, 你可以撥打ARGC 不管你想要它。 你可以調用任何你想要的argv。 這些只是常規的名字 我們用於them--參數計數, 而我們將在第二次看到, 參數向量,argv的。 但是你沒有給他們打電話 argc和argv,如果你不想, 但傳統上,這就是我們要做的。 所以無論如何,ARGC的參數計數。 這是一個整型變量,因此,作為 你可能會想到,如果我們有兩件事 那我們將要尋找 出這些是什麼類型的 多少東西 用戶輸入,ARGC是 要告訴我們多少 東西的用戶輸入。 所以,它給你一個數 命令行參數的用戶 該程序執行時輸入。 所以,如果你的程序是 運行點斜線貪婪, 和你貪婪的內 計劃你的主要功能 有聲明INT為主INT ARGC, 字符串argv的括號,然後 的argc在這種情況下是1。 現在請注意,我們不 指望有多少事 該程序名後用戶輸入。 程序名稱本身計數 作為命令行參數。 所以點斜線貪婪,在 這種情況下,的argc是其中之一。 如果用戶鍵入斜線貪1024 CS50 在命令行,argc那樣在這種情況下 將三種。 而且我們知道這是因為路 該字符串之間的分工 檢測是是否 有一個空間,或製表符, 或類似的東西他們之間。 這樣的白色空間的任何量,所謂, 值之間鍵入的命令行 表明有多少。 所以點斜線貪婪空間1024太空 CS50,的argc,在這種情況下,是3。 ARGV是參數向量。 矢量,順便說一句,只是 另一種說法陣列, 而這是一個數組 存儲字符串。 每個元素一個字符串,它是 琴弦用戶實際上 鍵入的命令行 當程序被執行。 現在,作為是這種情況 與任何陣列,如果 從我們的討論召回 陣列,argv的的第一個元素 總是會被發現 在argv的括號為零。 這是第一個索引 argv數組中。 使will--而事實上,這種意願 永遠是程序的名稱, 將始終位於 argv的括號為零。 ARGV的最後一個元素總是被發現 在argv的括號ARGC減一。 你知道為什麼嗎? 還記得多少個元素 存在於這個數組中。 好吧,我們知道that--它 元素ARGC數量。 如果用戶輸入的三樣東西在 命令行,的argc是三。 但是,因為在C,當我們的工作 與陣列,陣列的每個元素, 或者更確切地說,指標 陣列,從零開始。 如果我們有三個要素我們 陣列,我們有一個元件在argv的零, 在argv的一項所述的元件, 並且在argv的二元。 有一個在argv的任何元素 3,和大小的3的陣列。 所以這就是為什麼在過去 argv的元素總能 將在ARGV廣場發現 括號內ARGC減一。 因此,讓我們假設用戶執行 貪婪的程序作為follows-- 如果他們在命令行鍵入點 削減貪婪空間1024太空CS50, 而無論出於何種原因,我們已經 已經準備好我們的貪婪計劃 要知道與這些工作 命令行參數。 我們以前不,當我們的工作 它為貪婪的問題, 但讓​​我們說,我們現在已經修改 它讓我們做的過程 以某種方式命令行參數。 在這種情況下,ARGV零 就是點斜線貪婪。 什麼是argv的呢? 嗯,這是1024吧? 這為1024,但這裡有一個 真正重要的distinction-- 你還記得的argv的數據類型? 它存儲的字符串,對不對? 但它看起來像1024 是一個整數值。 這是一個非常重要的 區分,而實際上是 要成為東西,你 可能會遇到在以後的問題。 argv中一切 存儲為一個字符串。 所以argv的一個人的內容是 串1,0,二,四, 由這四個字符。 這是因為如果用戶鍵入 1,零,二,四 作為單獨的字母或字符。 它不是整數1024, 所以你不能直接 它說INT 1000的工作,或 而INT x等於argv的一減24。 直覺上,你可能會想到這一點 因為,好,這是1024減24, 所以x等於1000。 但實際上,這並非如此, 因為argv的一個是一個字符串。 字符串1024。 現在有一個功能,可以 用於字符串轉換為整數。 我不會破壞它適合你 現在,但我敢肯定Zamyla 會很高興地告訴你關於它的 演練為未來的問題。 但你也可以找到 問題like--藉口 我,函數會 為此,在參考50, 如果你去參考指南 你可以找到一個函數, 將這種轉換的。 但同樣,在演練 對於未來的問題, Zamyla將竭誠為 告訴你什麼功能 它是將轉換 串1024至1024的整數。 好吧,讓人感動的。 我們已經介紹了我們的ARGV零, 我們介紹的argv之一。 什麼是argv中二號呢? CS50。 一個人的可能 不言自明。 什麼是argv中了三頂? 好了,我們真的不知道,對不對? 我們有大小的3的陣列, 這是多少個元素的用戶 鍵入的命令行, 因此,如果我們去ARGV三, 我們現在超越 我們的數組的邊界。 編譯器將讓我們做到這一點, 有沒有直觀的問題是, 但在實際方面是怎麼回事 這種情況,我們真的不知道。 這要看是什麼 位於內存中 的argv 3將被預期為。 因此,我們最終可能 越來越遠逍遙法外。 以上不太可能,特別是當 你,而不是使用的argv正在處理 到任何其他陣列 這是在我們的計劃, 我們很可能會吃虧 段錯誤。如此反复, 一定不要超越邊界 你的陣列,尤其ARGV, 鑑於其較高的程度 在程序中的重要性。 我是道格·勞埃德。 這是CS50。