1 00:00:00,000 --> 00:00:02,480 >> [音樂播放] 2 00:00:02,480 --> 00:00:06,460 3 00:00:06,460 --> 00:00:09,350 >> DOUG LLOYD:好吧,讓我們 說說命令行參數。 4 00:00:09,350 --> 00:00:11,800 因此,到目前為止,在使用過程中很 多所有程序 5 00:00:11,800 --> 00:00:16,360 可能已經開始 像this-- INT主要無效。 6 00:00:16,360 --> 00:00:18,310 我們一直在收集 如果我們需要用戶輸入 7 00:00:18,310 --> 00:00:21,080 在我們的節目,如 馬里奧方案,例如, 8 00:00:21,080 --> 00:00:22,990 在程序的提示。 9 00:00:22,990 --> 00:00:25,190 修改我們沒有必要 主要的聲明, 10 00:00:25,190 --> 00:00:30,684 因為裡面,而不是我們主要的 只是說,你可以調用它來獲得int類型。 11 00:00:30,684 --> 00:00:32,350 如何大,你想要的金字塔呢? 12 00:00:32,350 --> 00:00:34,455 或者你可以調用它來獲得 float--多大變化 13 00:00:34,455 --> 00:00:36,400 我應該輸出給用戶? 14 00:00:36,400 --> 00:00:38,630 >> 還有另一種方式,雖然, 如果我們希望我們的用戶 15 00:00:38,630 --> 00:00:40,580 要能提供 數據我們的計劃 16 00:00:40,580 --> 00:00:43,320 在運行時,而不是當 程序運行, 17 00:00:43,320 --> 00:00:45,910 一個微妙的區別,但 有時一個非常有用的, 18 00:00:45,910 --> 00:00:48,120 我們需要聲明的主要的一種新形式。 19 00:00:48,120 --> 00:00:53,320 我們不能使用int主要無效的,如果我們想 在命令行收集其他數據 20 00:00:53,320 --> 00:00:57,540 當用戶運行該程序, 因此命令行參數。 21 00:00:57,540 --> 00:00:59,810 >> 為了收集這些命令行 來自用戶的參數, 22 00:00:59,810 --> 00:01:03,140 改變你的聲明 主要的樣子this-- INT 23 00:01:03,140 --> 00:01:10,450 主,開括號,INT ARGC,逗號, 字符串的argv,方括號, 24 00:01:10,450 --> 00:01:12,670 然後打開大括號。 25 00:01:12,670 --> 00:01:14,415 那麼,是什麼意思了嗎? 26 00:01:14,415 --> 00:01:19,410 好了,我們傳遞兩個參數, 或參數,或者輸入為主。 27 00:01:19,410 --> 00:01:23,800 其中一個叫整數 的argc,另一個是什麼? 28 00:01:23,800 --> 00:01:26,430 29 00:01:26,430 --> 00:01:29,640 這是一個字符串數組,對不對? 30 00:01:29,640 --> 00:01:31,140 我們看到,方括號。 31 00:01:31,140 --> 00:01:32,181 它是一個字符串數組。 32 00:01:32,181 --> 00:01:35,110 它不是一個單獨的字符串, 這是一個字符串數組。 33 00:01:35,110 --> 00:01:39,640 而這兩個參數,argc和argv, 讓你知道哪些數據用戶 34 00:01:39,640 --> 00:01:42,912 在命令行提供 又有多少事情,他們 35 00:01:42,912 --> 00:01:44,120 在命令行提供。 36 00:01:44,120 --> 00:01:46,570 非常有用的東西的工作。 37 00:01:46,570 --> 00:01:50,310 >> ARGC代表參數計數, 你應該知道,順便說一下, 38 00:01:50,310 --> 00:01:52,600 你可以撥打ARGC 不管你想要它。 39 00:01:52,600 --> 00:01:54,710 你可以調用任何你想要的argv。 40 00:01:54,710 --> 00:01:58,740 這些只是常規的名字 我們用於them--參數計數, 41 00:01:58,740 --> 00:02:00,907 而我們將在第二次看到, 參數向量,argv的。 42 00:02:00,907 --> 00:02:03,698 但是你沒有給他們打電話 argc和argv,如果你不想, 43 00:02:03,698 --> 00:02:05,570 但傳統上,這就是我們要做的。 44 00:02:05,570 --> 00:02:07,500 >> 所以無論如何,ARGC的參數計數。 45 00:02:07,500 --> 00:02:11,569 這是一個整型變量,因此,作為 你可能會想到,如果我們有兩件事 46 00:02:11,569 --> 00:02:13,860 那我們將要尋找 出這些是什麼類型的 47 00:02:13,860 --> 00:02:16,070 多少東西 用戶輸入,ARGC是 48 00:02:16,070 --> 00:02:18,559 要告訴我們多少 東西的用戶輸入。 49 00:02:18,559 --> 00:02:20,850 所以,它給你一個數 命令行參數的用戶 50 00:02:20,850 --> 00:02:22,470 該程序執行時輸入。 51 00:02:22,470 --> 00:02:25,780 所以,如果你的程序是 運行點斜線貪婪, 52 00:02:25,780 --> 00:02:28,670 和你貪婪的內 計劃你的主要功能 53 00:02:28,670 --> 00:02:34,800 有聲明INT為主INT ARGC, 字符串argv的括號,然後 54 00:02:34,800 --> 00:02:37,950 的argc在這種情況下是1。 55 00:02:37,950 --> 00:02:40,200 現在請注意,我們不 指望有多少事 56 00:02:40,200 --> 00:02:42,590 該程序名後用戶輸入。 57 00:02:42,590 --> 00:02:46,710 程序名稱本身計數 作為命令行參數。 58 00:02:46,710 --> 00:02:51,770 >> 所以點斜線貪婪,在 這種情況下,的argc是其中之一。 59 00:02:51,770 --> 00:02:57,910 如果用戶鍵入斜線貪1024 CS50 在命令行,argc那樣在這種情況下 60 00:02:57,910 --> 00:02:59,520 將三種。 61 00:02:59,520 --> 00:03:03,720 而且我們知道這是因為路 該字符串之間的分工 62 00:03:03,720 --> 00:03:06,030 檢測是是否 有一個空間,或製表符, 63 00:03:06,030 --> 00:03:08,230 或類似的東西他們之間。 64 00:03:08,230 --> 00:03:13,860 這樣的白色空間的任何量,所謂, 值之間鍵入的命令行 65 00:03:13,860 --> 00:03:15,720 表明有多少。 66 00:03:15,720 --> 00:03:24,040 所以點斜線貪婪空間1024太空 CS50,的argc,在這種情況下,是3。 67 00:03:24,040 --> 00:03:26,600 >> ARGV是參數向量。 68 00:03:26,600 --> 00:03:29,240 矢量,順便說一句,只是 另一種說法陣列, 69 00:03:29,240 --> 00:03:31,510 而這是一個數組 存儲字符串。 70 00:03:31,510 --> 00:03:35,540 每個元素一個字符串,它是 琴弦用戶實際上 71 00:03:35,540 --> 00:03:39,230 鍵入的命令行 當程序被執行。 72 00:03:39,230 --> 00:03:40,990 現在,作為是這種情況 與任何陣列,如果 73 00:03:40,990 --> 00:03:44,380 從我們的討論召回 陣列,argv的的第一個元素 74 00:03:44,380 --> 00:03:49,150 總是會被發現 在argv的括號為零。 75 00:03:49,150 --> 00:03:51,800 這是第一個索引 argv數組中。 76 00:03:51,800 --> 00:03:55,720 使will--而事實上,這種意願 永遠是程序的名稱, 77 00:03:55,720 --> 00:03:59,730 將始終位於 argv的括號為零。 78 00:03:59,730 --> 00:04:08,590 >> ARGV的最後一個元素總是被發現 在argv的括號ARGC減一。 79 00:04:08,590 --> 00:04:10,300 你知道為什麼嗎? 80 00:04:10,300 --> 00:04:14,180 還記得多少個元素 存在於這個數組中。 81 00:04:14,180 --> 00:04:16,660 好吧,我們知道that--它 元素ARGC數量。 82 00:04:16,660 --> 00:04:21,279 如果用戶輸入的三樣東西在 命令行,的argc是三。 83 00:04:21,279 --> 00:04:27,070 但是,因為在C,當我們的工作 與陣列,陣列的每個元素, 84 00:04:27,070 --> 00:04:30,190 或者更確切地說,指標 陣列,從零開始。 85 00:04:30,190 --> 00:04:34,000 如果我們有三個要素我們 陣列,我們有一個元件在argv的零, 86 00:04:34,000 --> 00:04:37,930 在argv的一項所述的元件, 並且在argv的二元。 87 00:04:37,930 --> 00:04:41,700 有一個在argv的任何元素 3,和大小的3的陣列。 88 00:04:41,700 --> 00:04:43,990 所以這就是為什麼在過去 argv的元素總能 89 00:04:43,990 --> 00:04:49,510 將在ARGV廣場發現 括號內ARGC減一。 90 00:04:49,510 --> 00:04:52,420 >> 因此,讓我們假設用戶執行 貪婪的程序作為follows-- 91 00:04:52,420 --> 00:04:57,970 如果他們在命令行鍵入點 削減貪婪空間1024太空CS50, 92 00:04:57,970 --> 00:05:00,720 而無論出於何種原因,我們已經 已經準備好我們的貪婪計劃 93 00:05:00,720 --> 00:05:04,050 要知道與這些工作 命令行參數。 94 00:05:04,050 --> 00:05:07,030 我們以前不,當我們的工作 它為貪婪的問題, 95 00:05:07,030 --> 00:05:09,660 但讓​​我們說,我們現在已經修改 它讓我們做的過程 96 00:05:09,660 --> 00:05:11,480 以某種方式命令行參數。 97 00:05:11,480 --> 00:05:15,720 在這種情況下,ARGV零 就是點斜線貪婪。 98 00:05:15,720 --> 00:05:17,042 什麼是argv的呢? 99 00:05:17,042 --> 00:05:19,030 嗯,這是1024吧? 100 00:05:19,030 --> 00:05:22,620 這為1024,但這裡有一個 真正重要的distinction-- 101 00:05:22,620 --> 00:05:26,410 你還記得的argv的數據類型? 102 00:05:26,410 --> 00:05:31,020 >> 它存儲的字符串,對不對? 103 00:05:31,020 --> 00:05:34,140 但它看起來像1024 是一個整數值。 104 00:05:34,140 --> 00:05:36,530 這是一個非常重要的 區分,而實際上是 105 00:05:36,530 --> 00:05:40,200 要成為東西,你 可能會遇到在以後的問題。 106 00:05:40,200 --> 00:05:43,770 argv中一切 存儲為一個字符串。 107 00:05:43,770 --> 00:05:48,775 所以argv的一個人的內容是 串1,0,二,四, 108 00:05:48,775 --> 00:05:50,275 由這四個字符。 109 00:05:50,275 --> 00:05:53,870 這是因為如果用戶鍵入 1,零,二,四 110 00:05:53,870 --> 00:05:56,680 作為單獨的字母或字符。 111 00:05:56,680 --> 00:06:00,730 它不是整數1024, 所以你不能直接 112 00:06:00,730 --> 00:06:11,580 它說INT 1000的工作,或 而INT x等於argv的一減24。 113 00:06:11,580 --> 00:06:15,550 >> 直覺上,你可能會想到這一點 因為,好,這是1024減24, 114 00:06:15,550 --> 00:06:17,920 所以x等於1000。 115 00:06:17,920 --> 00:06:22,020 但實際上,這並非如此, 因為argv的一個是一個字符串。 116 00:06:22,020 --> 00:06:23,940 字符串1024。 117 00:06:23,940 --> 00:06:28,739 現在有一個功能,可以 用於字符串轉換為整數。 118 00:06:28,739 --> 00:06:30,780 我不會破壞它適合你 現在,但我敢肯定Zamyla 119 00:06:30,780 --> 00:06:34,380 會很高興地告訴你關於它的 演練為未來的問題。 120 00:06:34,380 --> 00:06:36,390 但你也可以找到 問題like--藉口 121 00:06:36,390 --> 00:06:39,921 我,函數會 為此,在參考50, 122 00:06:39,921 --> 00:06:42,462 如果你去參考指南 你可以找到一個函數, 123 00:06:42,462 --> 00:06:43,820 將這種轉換的。 124 00:06:43,820 --> 00:06:45,980 但同樣,在演練 對於未來的問題, 125 00:06:45,980 --> 00:06:48,290 Zamyla將竭誠為 告訴你什麼功能 126 00:06:48,290 --> 00:06:53,280 它是將轉換 串1024至1024的整數。 127 00:06:53,280 --> 00:06:54,560 >> 好吧,讓人感動的。 128 00:06:54,560 --> 00:06:56,726 我們已經介紹了我們的ARGV零, 我們介紹的argv之一。 129 00:06:56,726 --> 00:06:58,000 什麼是argv中二號呢? 130 00:06:58,000 --> 00:06:58,620 CS50。 131 00:06:58,620 --> 00:07:01,350 一個人的可能 不言自明。 132 00:07:01,350 --> 00:07:02,950 什麼是argv中了三頂? 133 00:07:02,950 --> 00:07:04,970 好了,我們真的不知道,對不對? 134 00:07:04,970 --> 00:07:08,060 我們有大小的3的陣列, 這是多少個元素的用戶 135 00:07:08,060 --> 00:07:11,610 鍵入的命令行, 因此,如果我們去ARGV三, 136 00:07:11,610 --> 00:07:14,660 我們現在超越 我們的數組的邊界。 137 00:07:14,660 --> 00:07:18,570 編譯器將讓我們做到這一點, 有沒有直觀的問題是, 138 00:07:18,570 --> 00:07:22,890 但在實際方面是怎麼回事 這種情況,我們真的不知道。 139 00:07:22,890 --> 00:07:25,380 這要看是什麼 位於內存中 140 00:07:25,380 --> 00:07:28,060 的argv 3將被預期為。 141 00:07:28,060 --> 00:07:30,716 因此,我們最終可能 越來越遠逍遙法外。 142 00:07:30,716 --> 00:07:33,840 以上不太可能,特別是當 你,而不是使用的argv正在處理 143 00:07:33,840 --> 00:07:35,548 到任何其他陣列 這是在我們的計劃, 144 00:07:35,548 --> 00:07:38,660 我們很可能會吃虧 段錯誤。如此反复, 145 00:07:38,660 --> 00:07:42,756 一定不要超越邊界 你的陣列,尤其ARGV, 146 00:07:42,756 --> 00:07:47,170 鑑於其較高的程度 在程序中的重要性。 147 00:07:47,170 --> 00:07:48,100 >> 我是道格·勞埃德。 148 00:07:48,100 --> 00:07:50,170 這是CS50。 149 00:07:50,170 --> 00:07:51,457