1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [命令行參數] 2 00:00:02,000 --> 00:00:04,000 克里斯托弗·巴塞洛繆 - 哈佛大學] 3 00:00:04,000 --> 00:00:07,000 [這是CS50 - CS50.TV] 4 00:00:07,000 --> 00:00:11,000 一個程序一個有用的功能是接受用戶的輸入。 5 00:00:11,000 --> 00:00:15,000 到目前為止,我們已經探討了一些功能在CS50庫 6 00:00:15,000 --> 00:00:18,000 來接受用戶輸入,如“字符串,” 7 00:00:18,000 --> 00:00:23,000 它提示用戶,應用程序正在運行時,為一個字符串。 8 00:00:23,000 --> 00:00:28,000 >> 然而,在某些情況下,你要提供你的程序輸入 9 00:00:28,000 --> 00:00:30,000 它實際上是在運行。 10 00:00:30,000 --> 00:00:34,000 通過這種方式,你不必問從用戶的其他信息 11 00:00:34,000 --> 00:00:38,000 在執行一個簡單的任務。 12 00:00:38,000 --> 00:00:42,000 舉個例子,在UNIX的MV或移動命令。 13 00:00:42,000 --> 00:00:49,000 該命令允許用戶將一個文件從一個位置到另一個。 14 00:00:49,000 --> 00:00:55,000 根據手冊頁,MV接受兩個命令行參數: 15 00:00:55,000 --> 00:01:00,000 正在被移動的文件和該文件的位置被移動到。 16 00:01:00,000 --> 00:01:06,000 因此,這個例子中有一個命令有兩個參數。 17 00:01:06,000 --> 00:01:14,000 那麼,我們如何告訴我們的C程序來使用這些命令行參數? 18 00:01:14,000 --> 00:01:20,000 >> 哦,原來是主要的,這是我們在所有的C程序中使用,有一個秘密。 19 00:01:20,000 --> 00:01:26,000 主要有兩個參數:argc和argv。 20 00:01:26,000 --> 00:01:28,000 讓我們對這些條款。 21 00:01:28,000 --> 00:01:33,000 >> 第一個參數是argc,它代表的參數計數, 22 00:01:33,000 --> 00:01:36,000 有一個數據類型的整數。 23 00:01:36,000 --> 00:01:42,000 argc參數包含參數的個數,包括命令。 24 00:01:42,000 --> 00:01:47,000 在我們的移動命令,雖然我們只有兩個參數顯示, 25 00:01:47,000 --> 00:01:50,000 ARGC的值將是3。 26 00:01:50,000 --> 00:01:56,000 第二個參數,argv的,它代表的參數向量, 27 00:01:56,000 --> 00:02:01,000 是指向字符串的字符指針數組。 28 00:02:01,000 --> 00:02:06,000 >> 這意味著,每個元素在argv,從零開始, 29 00:02:06,000 --> 00:02:09,000 包含的命令和參數。 30 00:02:09,000 --> 00:02:16,000 例如,ARGV [0],我將把為ARGV零, 31 00:02:16,000 --> 00:02:20,000 總是包含正在運行的命令 - 32 00:02:20,000 --> 00:02:22,000 在這種情況下,毫伏。 33 00:02:22,000 --> 00:02:28,000 ARGV [1]將包含第一個參數,file.txt的, 34 00:02:28,000 --> 00:02:37,000 和argv [2]將包含第二個參數,〜/ CS50 /。 35 00:02:37,000 --> 00:02:42,000 最後一個參數argv的永遠是空的。 36 00:02:42,000 --> 00:02:46,000 因此,讓我們執行這些命令行參數。 37 00:02:46,000 --> 00:02:53,000 在前面的練習中,我們把無效的,沒什麼意思,作為主要的參數。 38 00:02:53,000 --> 00:02:57,000 然而,為了使用命令行參數, 39 00:02:57,000 --> 00:03:12,000 我們需要刪除無效和地點內的主要詮釋argc,焦炭*的argv []。 40 00:03:12,000 --> 00:03:17,000 現在,訪問整個從argv元素,這是你的論點, 41 00:03:17,000 --> 00:03:21,000 你可以簡單地重複,循環,通過這樣的數組。 42 00:03:21,000 --> 00:03:27,000 ,裡面的主的身體,我們要繼續前進,然後鍵入一個for循環: 43 00:03:27,000 --> 00:03:37,000 (INT I = 0;我ARGC,我+ +)。 44 00:03:37,000 --> 00:03:41,000 >> 我們不需要一個大括號,在這裡,因為我們只執行一行代碼 45 00:03:41,000 --> 00:03:44,000 身體內的這個循環。 46 00:03:44,000 --> 00:03:47,000 我們將繼續前進,一次打標籤, 47 00:03:47,000 --> 00:03:57,000 然後輸入輸出(ARGV [D],代表一個整數值, 48 00:03:57,000 --> 00:04:06,000 是%s,對於字符串,然後換行字符。 49 00:04:06,000 --> 00:04:12,000 然後,我們提供printf i為循環的當前迭代 50 00:04:12,000 --> 00:04:18,000 和argv [i]的當前命令行參數的字符串表示形式。 51 00:04:18,000 --> 00:04:25,000 當我們運行它帶有兩個參數,我們可以看到在終端上顯示的參數。 52 00:04:34,000 --> 00:04:38,000 剛才我們說的argv舉行的字符指針數組。 53 00:04:38,000 --> 00:04:45,000 >> 所以,如果是這樣的話,怎麼那麼,我們訪問每個參數的單個字符? 54 00:04:45,000 --> 00:04:51,000 例如,如果我想尋找一個特定的字符中的第一個參數呢? 55 00:04:51,000 --> 00:04:55,000 那麼,答案是,我們需要申請一個嵌套循環 56 00:04:55,000 --> 00:04:59,000 在參數字符串中的每一個元素,然後遍歷。 57 00:04:59,000 --> 00:05:02,000 這是你如何做到這一點。 58 00:05:02,000 --> 00:05:10,000 >> 首先,我們要去副本的example2.c的。 59 00:05:10,000 --> 00:05:13,000 然後,在第一個for循環, 60 00:05:13,000 --> 00:05:15,000 我們要添加一個額外的循環。 61 00:05:15,000 --> 00:05:28,000 因此,對於(J = 0,N = strlen的(的argv []) 62 00:05:28,000 --> 00:05:32,000 然後給了我們當前參數的長度, 63 00:05:32,000 --> 00:05:39,000 J 00:05:43,000 我們要打印的每一個字符的位置 65 00:05:43,000 --> 00:05:47,000 內的當前參數使用printf。 66 00:05:47,000 --> 00:05:57,000 所以,printf的(“ARGV [D],代表當前參數的索引, 67 00:05:57,000 --> 00:06:05,000 然後按[%D]再次的,代表了當前字符的當前參數, 68 00:06:05,000 --> 00:06:13,000 是:%C,在當前字符的參數。 69 00:06:13,000 --> 00:06:20,000 最後,我們提供printf外循環的索引,我 70 00:06:20,000 --> 00:06:22,000 然後索引的內部循環。 71 00:06:22,000 --> 00:06:28,000 >> 而我們的最後一個參數為輸出的參數是實際的字符 72 00:06:28,000 --> 00:06:31,000 在命令行中。 73 00:06:31,000 --> 00:06:37,000 現在,因為我使用了字符串函數strlen獲得一個字符串的長度, 74 00:06:37,000 --> 00:06:43,000 我還必須添加string.h中的庫的頂部,我們有。 75 00:06:43,000 --> 00:06:50,000 因此,要做到這一點,我們就上去,剛下stdio.h中,我們該怎麼辦 76 00:06:50,000 --> 00:06:57,000 #包括文件。 77 00:06:57,000 --> 00:07:02,000 >> 所以,讓我們編譯和運行,並為它提供的實際參數。 78 00:07:09,000 --> 00:07:18,000 >> 而且,我們可以看到,我們現在已經在參數的確切位置,每個單獨的字符。 79 00:07:18,000 --> 00:07:23,000 所以,就是這樣。我是克里斯托弗·巴塞洛繆,這是CS50。 80 00:07:23,000 --> 00:07:26,000 [CS50.TV]