[音乐播放] 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。