>> 罗伯：好吧。
欢迎到首节。
我抢。
>> 约瑟夫：我是约瑟夫。
>> 罗伯：所以我们将深入权利英寸
首先要说说 是电器。
所以希望你们中的大多数都 已经下载了它。
但是你可以看到指示 在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：是的。