1 00:00:00,000 --> 00:00:12,510 2 00:00:12,510 --> 00:00:13,870 >> 罗伯:好吧。 3 00:00:13,870 --> 00:00:16,770 欢迎到首节。 4 00:00:16,770 --> 00:00:17,480 我抢。 5 00:00:17,480 --> 00:00:18,806 >> 约瑟夫:我是约瑟夫。 6 00:00:18,806 --> 00:00:21,540 >> 罗伯:所以我们将深入权利英寸 7 00:00:21,540 --> 00:00:23,420 首先要说说 是电器。 8 00:00:23,420 --> 00:00:27,150 所以希望你们中的大多数都 已经下载了它。 9 00:00:27,150 --> 00:00:37,180 但是你可以看到指示 在cs50.net/appliance。 10 00:00:37,180 --> 00:00:38,430 哦,上帝,现在我的自我意识。 11 00:00:38,430 --> 00:00:44,590 12 00:00:44,590 --> 00:00:45,430 我还听到它。 13 00:00:45,430 --> 00:00:47,232 >> 约瑟夫:哇,这听起来像 它的晕头转向。 14 00:00:47,232 --> 00:00:52,460 >> 罗伯:所以有些人一直有 与它的问题,所以不要等到 15 00:00:52,460 --> 00:00:54,940 问题的最后一分钟设置为 试图解决的电器和 16 00:00:54,940 --> 00:00:56,320 找出它不工作。 17 00:00:56,320 --> 00:00:59,010 >> 约瑟夫:如果有什么不工作 而你需要帮助,你可以去 18 00:00:59,010 --> 00:01:03,390 cs50.net/discussion我们 有一个论坛,在这里你 19 00:01:03,390 --> 00:01:04,110 可以发布您的问题。 20 00:01:04,110 --> 00:01:06,655 我们会得到他们最终。 21 00:01:06,655 --> 00:01:07,490 >> 罗伯:好吧。 22 00:01:07,490 --> 00:01:12,180 因此,这是什么样的电器 模样。 23 00:01:12,180 --> 00:01:15,480 再次,它只是一个完全独立的 操作系统内运行的 24 00:01:15,480 --> 00:01:19,440 无论操作系统你 在笔记本电脑上运行。 25 00:01:19,440 --> 00:01:24,450 和主就是你 使用是gedit的。 26 00:01:24,450 --> 00:01:28,050 所以希望这已经 成为一个熟悉的网站。 27 00:01:28,050 --> 00:01:29,470 该终端。 28 00:01:29,470 --> 00:01:31,890 >> 你也可以运行Chrome浏览器 内的电器。 29 00:01:31,890 --> 00:01:33,860 曾有一对夫妇的人 谁曾报道互联网 30 00:01:33,860 --> 00:01:35,390 在设备无法正常工作。 31 00:01:35,390 --> 00:01:38,090 其中一些刚刚假设 有是不应该 32 00:01:38,090 --> 00:01:39,190 网络中的设备。 33 00:01:39,190 --> 00:01:40,750 但是,是的,还有被认为 是互联网。 34 00:01:40,750 --> 00:01:44,000 35 00:01:44,000 --> 00:01:46,410 >> 我会说出来的权利,但它不 真正意味着什么。 36 00:01:46,410 --> 00:01:50,680 如果网络不能正常工作, 这就是你往往需要 37 00:01:50,680 --> 00:01:52,180 运行修复它。 38 00:01:52,180 --> 00:01:55,602 如果您有互联网的问题,不 记住它,只是它张贴在 39 00:01:55,602 --> 00:01:57,560 讨论,我们会说,运行。 40 00:01:57,560 --> 00:02:00,420 但互联网应该是工作。 41 00:02:00,420 --> 00:02:06,650 >> 所以,唯一的其他东西 - 是啊,没有什么 别的是真正相关。 42 00:02:06,650 --> 00:02:08,979 但我只是想指出 - 43 00:02:08,979 --> 00:02:13,290 请参阅本右下角。 44 00:02:13,290 --> 00:02:16,530 所以,你的每一个设备的应 有一个IP地址。 45 00:02:16,530 --> 00:02:22,350 后来在这个学期,该IP 地址将变得更加重要时 46 00:02:22,350 --> 00:02:27,230 你的工作在网络上对集,因为 你就可以访问 47 00:02:27,230 --> 00:02:32,310 网站,你正在努力从你的 当地的Chrome使用此IP地址。 48 00:02:32,310 --> 00:02:35,400 >> 但我喜欢用的IP地址 为 - 和你没有做到这一点,我 49 00:02:35,400 --> 00:02:37,460 只是想指出来 - 50 00:02:37,460 --> 00:02:39,540 就在这里。 51 00:02:39,540 --> 00:02:42,910 所以这是一个终端窗口 我的Mac,这不是在 52 00:02:42,910 --> 00:02:44,580 电器都没有。 53 00:02:44,580 --> 00:02:47,190 并且你可以看看是什么 这个命令的作用。 54 00:02:47,190 --> 00:02:51,855 但我直接去的SSH 我的电器。 55 00:02:51,855 --> 00:02:53,410 我不知道IP是什么。 56 00:02:53,410 --> 00:02:54,300 >> 约瑟夫:168 - 57 00:02:54,300 --> 00:02:56,080 >> 168.224.1.0。 58 00:02:56,080 --> 00:02:59,950 >> 罗伯:所以一旦我受够了 与此,请登录。 59 00:02:59,950 --> 00:03:05,450 现在,基本上,这是相同的 我的电器内的终端窗口。 60 00:03:05,450 --> 00:03:10,280 所以,我几乎从来没有真正的工作 从设备本身。 61 00:03:10,280 --> 00:03:12,550 我只是一直有它运行 在最小化的背景 62 00:03:12,550 --> 00:03:15,890 并SSHed进去。 63 00:03:15,890 --> 00:03:24,270 >> 这个问题是你不打算 能够容易地用gedit 64 00:03:24,270 --> 00:03:25,600 直接从本。 65 00:03:25,600 --> 00:03:31,500 但是,如果你想成为一个真正的酷 黑客,那么你应该习惯了一个 66 00:03:31,500 --> 00:03:34,220 命令行的文本编辑器呢。 67 00:03:34,220 --> 00:03:39,620 所以Vim和Emacs和纳米,所有这些 有不同的选择。 68 00:03:39,620 --> 00:03:41,560 纳米往往是最容易的。 69 00:03:41,560 --> 00:03:45,006 而且我认为它没有 语法高亮。 70 00:03:45,006 --> 00:03:47,620 哦,不,完全不会。 71 00:03:47,620 --> 00:03:49,870 所以你可以使用纳米,因为 那一个是很容易的。 72 00:03:49,870 --> 00:03:52,000 >> 你看到所有这些命令 在底部。 73 00:03:52,000 --> 00:03:54,750 这个小胡萝卜象征。 74 00:03:54,750 --> 00:03:57,620 如果你以前没有见过它,你会 可能看到了很多了。 75 00:03:57,620 --> 00:04:02,350 这通常意味着控制胡萝卜, 喜欢你的键盘的左下角 76 00:04:02,350 --> 00:04:04,130 控制字符。 77 00:04:04,130 --> 00:04:07,260 所以在这里它告诉我到这里 - 78 00:04:07,260 --> 00:04:08,710 哦,这不是断我是否放大。 79 00:04:08,710 --> 00:04:11,040 所以,控制,X是如何 我要退出。 80 00:04:11,040 --> 00:04:14,710 和它说我打的Y 是的,对于节能,N代表号 81 00:04:14,710 --> 00:04:17,190 所以这是纳米。 82 00:04:17,190 --> 00:04:22,860 >> Vim和Emacs往往是稍 复杂的和压倒一切的。 83 00:04:22,860 --> 00:04:28,840 但是你可以习惯它, 然后你会爱上它。 84 00:04:28,840 --> 00:04:30,590 所以,就是这样。 85 00:04:30,590 --> 00:04:31,720 >> 约瑟夫:没必要那样做。 86 00:04:31,720 --> 00:04:31,840 >> 罗伯:是啊。 87 00:04:31,840 --> 00:04:37,510 你可以自由地用gedit的 其余的学期。 88 00:04:37,510 --> 00:04:40,630 所以任何设备相关的问题? 89 00:04:40,630 --> 00:04:42,820 还是你有什么别的什么想法 必须谈及有关 90 00:04:42,820 --> 00:04:43,610 家电? 91 00:04:43,610 --> 00:04:43,996 是。 92 00:04:43,996 --> 00:04:47,720 >> 扬声器1:当你SSHed到您的 的事情,是密码深红? 93 00:04:47,720 --> 00:04:48,390 >> 罗伯:是啊。 94 00:04:48,390 --> 00:04:50,170 对于几乎所有的密码 在电器是怎么回事 95 00:04:50,170 --> 00:04:52,473 是深红。 96 00:04:52,473 --> 00:04:56,517 >> 扬声器2:安装像一个真正的IDE 在设备上,将它的工作? 97 00:04:56,517 --> 00:04:59,200 98 00:04:59,200 --> 00:05:07,290 >> 罗伯:我想象的Eclipse确实有 Fedora的版本,在这种情况下,是的, 99 00:05:07,290 --> 00:05:08,420 你可以做到这一点。 100 00:05:08,420 --> 00:05:10,875 它可能不是真的值得。 101 00:05:10,875 --> 00:05:11,742 >> 扬声器2:确定。 102 00:05:11,742 --> 00:05:15,924 所以它可能如果我想更轻松 使用Eclipse,只需使用原生和 103 00:05:15,924 --> 00:05:17,646 然后上传到 - 104 00:05:17,646 --> 00:05:21,090 >> 罗伯:哦,那也是可能更容易。 105 00:05:21,090 --> 00:05:24,046 但你可以得到它的工作 内的电器。 106 00:05:24,046 --> 00:05:27,740 >> 约瑟夫:而对于摄像头的问题 是,你可以安装另一个 107 00:05:27,740 --> 00:05:29,490 IDE中的电器内? 108 00:05:29,490 --> 00:05:31,520 >> 罗伯:Eclipse中作为一个 例如一个IDE的。 109 00:05:31,520 --> 00:05:34,800 110 00:05:34,800 --> 00:05:36,050 任何其它电器问题吗? 111 00:05:36,050 --> 00:05:38,250 112 00:05:38,250 --> 00:05:38,680 好的。 113 00:05:38,680 --> 00:05:44,920 >> 所以我们现在进入到命令行 接口相关的东西,所以CLI。 114 00:05:44,920 --> 00:05:47,990 又一次,我只是去上班的 在这里,因为这是相同的 115 00:05:47,990 --> 00:05:52,780 在一个终端窗口工作 内的电器。 116 00:05:52,780 --> 00:05:54,160 是如何形成的字体看? 117 00:05:54,160 --> 00:05:55,970 是否足够大? 118 00:05:55,970 --> 00:05:57,000 好的。 119 00:05:57,000 --> 00:06:02,480 >> 所以有很多的命令是 你应该得到很习惯 120 00:06:02,480 --> 00:06:04,490 整个学期。 121 00:06:04,490 --> 00:06:09,480 大二用于导航的LS,列表 此目录中的文件;和 122 00:06:09,480 --> 00:06:11,380 CD,所以更改目录。 123 00:06:11,380 --> 00:06:18,390 这样我就可以改变桌面,然后 一个很常见的模式是cd到一个 124 00:06:18,390 --> 00:06:22,550 目录并立即LS 什么的在目录中。 125 00:06:22,550 --> 00:06:25,540 >> 人们有时也没有意识到 该选项卡完成的一件事。 126 00:06:25,540 --> 00:06:28,370 因此,像CD,VH,然后我打标签。 127 00:06:28,370 --> 00:06:30,790 我几乎从来不打出来 整个事情。 128 00:06:30,790 --> 00:06:32,920 然后,如果我继续打标签 再次,它会自动 129 00:06:32,920 --> 00:06:33,670 开始我列出。 130 00:06:33,670 --> 00:06:37,000 所以我可以cd虚拟主机,本地主机。 131 00:06:37,000 --> 00:06:39,880 而这只是要 - 132 00:06:39,880 --> 00:06:43,380 如果你还没有听说过这个词 之前,目录是另一个字 133 00:06:43,380 --> 00:06:45,170 为文件夹。 134 00:06:45,170 --> 00:06:49,930 所以,现在如果你看 - 135 00:06:49,930 --> 00:06:51,810 让我们把那个顶端。 136 00:06:51,810 --> 00:06:55,380 >> 所以,现在,如果你在括号中看到的,你 看到小波浪线,斜线,虚拟主机, 137 00:06:55,380 --> 00:06:56,810 斜线,本地主机。 138 00:06:56,810 --> 00:07:00,040 所以,波浪,是指 我的主目录。 139 00:07:00,040 --> 00:07:03,090 这是你的目录 当你通过SSH连接。在 140 00:07:03,090 --> 00:07:05,660 这是你在​​当目录 你打开一个终端。 141 00:07:05,660 --> 00:07:08,650 这是你从哪里开始。 142 00:07:08,650 --> 00:07:13,110 所以我为我的主目录里面, 而我的虚拟主机里面 143 00:07:13,110 --> 00:07:14,475 我的主目录的目录中。 144 00:07:14,475 --> 00:07:19,670 然后我在本地内 主办这里面的目录。 145 00:07:19,670 --> 00:07:23,740 >> 因此,一些其他的与CD有用的事情 - 146 00:07:23,740 --> 00:07:29,220 或好,一般,所以总是点 指的是当前目录。 147 00:07:29,220 --> 00:07:31,130 镉,点是一个非常值钱的命令。 148 00:07:31,130 --> 00:07:35,150 但是,这改变的 当前目录。 149 00:07:35,150 --> 00:07:38,230 一个更有效的方法之一在以下方面 CD是点,点,这是 150 00:07:38,230 --> 00:07:40,220 只是去了一个目录。 151 00:07:40,220 --> 00:07:43,360 >> 并注意,这些 - 152 00:07:43,360 --> 00:07:48,610 我想说的别名,但这些 符号,点和点,点,这些工作 153 00:07:48,610 --> 00:07:51,740 对于几乎你的任何命令 将运行在想。 154 00:07:51,740 --> 00:07:55,370 因此,像CD可能是在那里你会 使用最多的,但这些都不是 155 00:07:55,370 --> 00:07:56,780 事情刚刚CD理解。 156 00:07:56,780 --> 00:07:59,980 这是相当多的东西你的整个 命令行了解。 157 00:07:59,980 --> 00:08:01,932 很多程序可以理解 点与点,点。 158 00:08:01,932 --> 00:08:04,830 159 00:08:04,830 --> 00:08:09,090 >> 所以其他有用的 - CD,破折号。 160 00:08:09,090 --> 00:08:13,460 所以这是要带我去了 我是去年英寸目录 161 00:08:13,460 --> 00:08:15,980 所以有时候我会做这样的事情, 哦,我的工作在这里。 162 00:08:15,980 --> 00:08:21,110 而我看​​到的东西一定误差, 我会去通过去调查它 163 00:08:21,110 --> 00:08:24,020 一些随机的目录里。 164 00:08:24,020 --> 00:08:25,260 我不知道这是否会 让我在那里。 165 00:08:25,260 --> 00:08:25,720 它的意志。 166 00:08:25,720 --> 00:08:27,615 于是我做我想做的事情 在此目录中。 167 00:08:27,615 --> 00:08:28,950 胡说,胡说,胡说,胡说,胡说。 168 00:08:28,950 --> 00:08:31,770 我当时想,没事,我想 回到我在哪里。 169 00:08:31,770 --> 00:08:34,490 CD,破折号,它带给我的右后卫。 170 00:08:34,490 --> 00:08:39,970 >> 所以,我要扔了很多 今天的这些你。 171 00:08:39,970 --> 00:08:43,730 我不希望你记住 所有的人。 172 00:08:43,730 --> 00:08:46,170 样的,它只是知道 它们的存在。 173 00:08:46,170 --> 00:08:48,690 再后来就当你喜欢, 嗯,我想回去 174 00:08:48,690 --> 00:08:51,870 目录我只是在,哦,等等, 类似的东西存在。 175 00:08:51,870 --> 00:08:53,980 你不必只需键入 再整个目录。 176 00:08:53,980 --> 00:08:56,090 >> 约瑟夫:最终你会刚 一遍又一遍的使用它们,并且 177 00:08:56,090 --> 00:08:57,830 它会变成肌肉记忆。 178 00:08:57,830 --> 00:09:00,090 >> 罗伯:是啊。 179 00:09:00,090 --> 00:09:02,930 我以前那么如何说,那波浪 是你的home目录。 180 00:09:02,930 --> 00:09:04,820 所以我可以cd,波浪线。 181 00:09:04,820 --> 00:09:07,280 但我什至不有 这样做,如果我只是 - 182 00:09:07,280 --> 00:09:09,760 我会回去的目录,以便 这不是一个毫无意义的例子。 183 00:09:09,760 --> 00:09:14,560 但是,如果我只是做CD,这也是该 一样,去我的主目录。 184 00:09:14,560 --> 00:09:18,380 185 00:09:18,380 --> 00:09:19,880 我做的命令,K. 186 00:09:19,880 --> 00:09:24,015 >> 约瑟夫:您也可以键入清晰, 总之,它应该清除它。 187 00:09:24,015 --> 00:09:28,650 >> 罗伯:我也想控制, L同时,这样做了。 188 00:09:28,650 --> 00:09:29,690 所以,很多不同的方式。 189 00:09:29,690 --> 00:09:34,070 我觉得有一定的差异,其中 明确和控制,L将只 190 00:09:34,070 --> 00:09:37,280 真的把它推到顶部, 我仍然可以向后滚动。 191 00:09:37,280 --> 00:09:40,580 命令,K字面上破坏 一切,你 192 00:09:40,580 --> 00:09:42,960 不能滚动备份。 193 00:09:42,960 --> 00:09:45,530 最起码,这是 它是如何工作的iTerm2。 194 00:09:45,530 --> 00:09:48,690 我不知道其他的事情 - 195 00:09:48,690 --> 00:09:49,360 哦。 196 00:09:49,360 --> 00:09:55,450 >> 用ssh方式连接,所以如果你是在Windows上, 你将要下载的PuTTY 197 00:09:55,450 --> 00:10:02,360 为了SSH,因为Windows不 有这样一个内置的SSH工具。 198 00:10:02,360 --> 00:10:06,150 从Mac电脑,你可以只是直接的SSH 从终端窗口。 199 00:10:06,150 --> 00:10:08,755 200 00:10:08,755 --> 00:10:09,690 确定。 201 00:10:09,690 --> 00:10:11,840 有问题吗? 202 00:10:11,840 --> 00:10:19,260 >> 通过ls,所以一些习惯 大多数这些命令是 - 203 00:10:19,260 --> 00:10:20,060 好了,我就做一个。 204 00:10:20,060 --> 00:10:21,310 LS,破折号,L。 205 00:10:21,310 --> 00:10:26,330 所以破折号,l是什么,我们要去 调用一个标志,LS。 206 00:10:26,330 --> 00:10:30,770 和很多这些命令有标志 您可以传递给他们。 207 00:10:30,770 --> 00:10:35,020 所以在这种情况下,仪表板,l是一个标志 告诉它给我一个完整的 208 00:10:35,020 --> 00:10:37,850 所有的信息清单 这些文件。 209 00:10:37,850 --> 00:10:44,790 >> 所以,我们在这里看到,桌面是 在12:54更新于7月30日。 210 00:10:44,790 --> 00:10:47,160 下载于9月6日修改。 211 00:10:47,160 --> 00:10:52,350 这些都是当前大小和 这些目录中的字节数。 212 00:10:52,350 --> 00:10:54,412 您不必了解 所有这一切。 213 00:10:54,412 --> 00:11:00,380 >> 这东西在左边,这些drwx的, 这将成为更相关 214 00:11:00,380 --> 00:11:02,290 以后当你不得不处理 - 215 00:11:02,290 --> 00:11:05,900 有做谁拥有权限 来看看这些文件。 216 00:11:05,900 --> 00:11:09,880 所以,如果你没有上唯一的用户 这台电脑,你就可以到 217 00:11:09,880 --> 00:11:13,345 说好,我应该是唯一一个 可以看看这个文件,或者我 218 00:11:13,345 --> 00:11:14,870 要允许每个人 看看这个文件。 219 00:11:14,870 --> 00:11:17,710 所以,别人在我的电脑上 可以看看这个文件。 220 00:11:17,710 --> 00:11:22,190 221 00:11:22,190 --> 00:11:25,600 我什至不知道这是什么 - 这是什么呢? 222 00:11:25,600 --> 00:11:26,840 >> 约瑟夫:我不太清楚,其实。 223 00:11:26,840 --> 00:11:27,705 >> 罗伯:不知道。 224 00:11:27,705 --> 00:11:30,530 >> 约瑟夫:但是,如果你不知道,有 您可以使用一个有用的命令 225 00:11:30,530 --> 00:11:31,680 告诉你什么装置的输出。 226 00:11:31,680 --> 00:11:33,780 如果你的男人类型 该命令前 - 227 00:11:33,780 --> 00:11:35,000 所以M-A-N。罗伯:男人。 228 00:11:35,000 --> 00:11:37,690 这样的人是另外一个 这是非常有用的。 229 00:11:37,690 --> 00:11:39,540 和男人,LS。 230 00:11:39,540 --> 00:11:47,320 因此,手册页,他们有两个 命令,你将要使用 231 00:11:47,320 --> 00:11:50,330 在命令行中,他们也有 功能,将有关 232 00:11:50,330 --> 00:11:52,530 与C所以,你可以man - 233 00:11:52,530 --> 00:11:53,720 我忽略3。 234 00:11:53,720 --> 00:11:57,410 但3人的printf会带来 了C版的printf。 235 00:11:57,410 --> 00:12:01,030 但是,如果我只是做男人的printf,这是 要调出命令的printf 236 00:12:01,030 --> 00:12:03,540 这种情况发生在命令行。 237 00:12:03,540 --> 00:12:05,730 >> 这样的男人,LS。 238 00:12:05,730 --> 00:12:09,030 手册页可以很 铺天盖地。 239 00:12:09,030 --> 00:12:12,770 在这里,虽然,你会看到此房源 所有这些标志的是LS 240 00:12:12,770 --> 00:12:14,300 理解。 241 00:12:14,300 --> 00:12:17,876 因此,如果我们去冲,l和 - 242 00:12:17,876 --> 00:12:19,300 我只是要在你扔了。 243 00:12:19,300 --> 00:12:23,050 但为了搜索,你要 先打问题 244 00:12:23,050 --> 00:12:24,780 标记或斜线按钮。 245 00:12:24,780 --> 00:12:26,040 所以,凶多吉少。 246 00:12:26,040 --> 00:12:29,000 >> 然后我就可以搜索 对于我想做的事情。 247 00:12:29,000 --> 00:12:33,780 所以我打算削减为破折号,L。 248 00:12:33,780 --> 00:12:35,110 而且它那里。 249 00:12:35,110 --> 00:12:37,450 因此,使用一个长列表格式。 250 00:12:37,450 --> 00:12:40,060 这并不能帮助我弄清楚什么 该特定列的意思,但我 251 00:12:40,060 --> 00:12:44,480 假设在这里的某个地方 它会解释。 252 00:12:44,480 --> 00:12:48,740 因此,使用手册页的任何命令 你不立刻明白了。 253 00:12:48,740 --> 00:12:51,080 >> 我敢肯定,你甚至可以男人,男人。 254 00:12:51,080 --> 00:12:53,070 在线给接口 参考手册。 255 00:12:53,070 --> 00:12:57,700 256 00:12:57,700 --> 00:13:03,570 呵呵,最后一个是也许稍微 相关的是LS,破折号,。 257 00:13:03,570 --> 00:13:08,490 所以请注意,如果我只是做LS, 我得到这五个文件。 258 00:13:08,490 --> 00:13:11,480 如果我做LS,破折号,我 得到更多的文件。 259 00:13:11,480 --> 00:13:15,350 所以,所有这些之间的共同点 新文件是事先点。 260 00:13:15,350 --> 00:13:21,220 >> 因此,该公约是一个文件, 以圆点开头的隐藏。 261 00:13:21,220 --> 00:13:25,300 所以,你不希望看到这个文件,你 不想拥有它惹 262 00:13:25,300 --> 00:13:26,750 您的目录清单。 263 00:13:26,750 --> 00:13:30,020 只有当你明确要求, 没事,LS,破折号,,告诉我。 264 00:13:30,020 --> 00:13:32,830 的一个代表所有文件, 包括隐藏的。 265 00:13:32,830 --> 00:13:37,260 266 00:13:37,260 --> 00:13:39,270 因此,一些其他命令。 267 00:13:39,270 --> 00:13:41,323 哦,在这一点上的问题? 268 00:13:41,323 --> 00:13:41,746 是。 269 00:13:41,746 --> 00:13:45,914 >> 扬声器3:当你做LS, 一,什么是点,点? 270 00:13:45,914 --> 00:13:46,870 >> 罗伯:哦。 271 00:13:46,870 --> 00:13:48,780 所以,这就是我在说什么。 272 00:13:48,780 --> 00:13:50,890 这是同样的事情在那里 我喜欢的CD,点,点。 273 00:13:50,890 --> 00:13:56,790 所以在技术上,点和点,点是 存在于每一个文件 274 00:13:56,790 --> 00:14:03,620 所在的目录dot文件指 到当前目录。 275 00:14:03,620 --> 00:14:06,930 所以,如果我的CD,点,我只是去 留在目录中。 276 00:14:06,930 --> 00:14:10,870 和圆点,圆点总是指 以前的一级目录。 277 00:14:10,870 --> 00:14:18,200 所以,如果我进入日志和ls,破折号,人, 我会看到圆点,圆点。 cd到网点,网点 278 00:14:18,200 --> 00:14:20,390 使我先前的目录。 279 00:14:20,390 --> 00:14:24,530 280 00:14:24,530 --> 00:14:25,780 是啊。 281 00:14:25,780 --> 00:14:27,160 282 00:14:27,160 --> 00:14:28,110 确定。 283 00:14:28,110 --> 00:14:33,070 >> 因此,另一个非常重要的 命令为rm。 284 00:14:33,070 --> 00:14:35,650 所以,这就是我们要去 使用去除。 285 00:14:35,650 --> 00:14:38,100 让我实际上做一套 命令第一。 286 00:14:38,100 --> 00:14:39,610 所以MKDIR。 287 00:14:39,610 --> 00:14:42,770 MKDIR是你可以 创建目录。 288 00:14:42,770 --> 00:14:47,530 我会创建一个临时目录 并进入该临时目录。 289 00:14:47,530 --> 00:14:49,590 和预期的一样,它是空的。 290 00:14:49,590 --> 00:14:53,680 但是,如果我LS,破折号,一个,我还有点 与点,点,因为点是指 291 00:14:53,680 --> 00:14:54,480 当前目录。 292 00:14:54,480 --> 00:14:56,170 与点,点指 上一个目录。 293 00:14:56,170 --> 00:14:58,700 而那些将永远存在,无论 您所在的目录 294 00:14:58,700 --> 00:15:01,910 295 00:15:01,910 --> 00:15:09,010 >> 这是一个完全没有必要的 命令,但触摸。 296 00:15:09,010 --> 00:15:11,880 我只是用它,因为它是 一个简单的方法来创建文件。 297 00:15:11,880 --> 00:15:16,180 所以触摸,触摸B,触摸c是刚 要创建一个名为三个文件, 298 00:15:16,180 --> 00:15:17,845 b和c是完全空的。 299 00:15:17,845 --> 00:15:20,450 300 00:15:20,450 --> 00:15:24,980 于是我点创建那些在 首先就是这么说是RM 301 00:15:24,980 --> 00:15:26,250 我们如何才能将其删除。 302 00:15:26,250 --> 00:15:27,850 所以,RM,一。 303 00:15:27,850 --> 00:15:30,960 它会问我,取出 常规的空文件? 304 00:15:30,960 --> 00:15:33,170 然后我会说是的。 305 00:15:33,170 --> 00:15:39,090 >> 所以,如果我确实知道我要 删除该文件,而不必是 306 00:15:39,090 --> 00:15:44,500 提示,定期删除空文件?, 然后RM,破折号,F将是该 307 00:15:44,500 --> 00:15:48,230 标志,上面写着,强制删除而不 甚至促使我哦,是你 308 00:15:48,230 --> 00:15:49,710 确定要删除的文件? 309 00:15:49,710 --> 00:15:50,810 是的,我敢肯定。 310 00:15:50,810 --> 00:15:56,050 所以,RM,破折号,FB将只 做到这一点不求回报。 311 00:15:56,050 --> 00:15:57,950 >> 因此,让我们做一些更多的目录。 312 00:15:57,950 --> 00:16:03,670 MKDIR,TMP2,CD,TMP2, 触,触按B。 313 00:16:03,670 --> 00:16:04,300 确定。 314 00:16:04,300 --> 00:16:08,180 所以现在我想删除 TMP2作为目录。 315 00:16:08,180 --> 00:16:10,316 所以,RM TMP2。 316 00:16:10,316 --> 00:16:12,920 你不能删除TMP2, 它是一个目录。 317 00:16:12,920 --> 00:16:21,370 因此,这里的问题是,RM不 马上工作在目录上。 318 00:16:21,370 --> 00:16:26,530 它只是意味着像文件 非目录的文件。 319 00:16:26,530 --> 00:16:30,800 >> 所以我们能做些什么 这里为rm,破折号,河 320 00:16:30,800 --> 00:16:35,160 这表示递归,这可能 不是对你意味着什么呢。 321 00:16:35,160 --> 00:16:38,280 但是,当你到了递归, 这将意味着更多。 322 00:16:38,280 --> 00:16:43,540 所以,RM,破折号,R,TMP2是要 递归进入该目录。 323 00:16:43,540 --> 00:16:45,540 于是陷入目录TMP2? 324 00:16:45,540 --> 00:16:47,330 是的,让我们考虑这样做。 325 00:16:47,330 --> 00:16:49,360 难道我们要删除TMP2 /一? 326 00:16:49,360 --> 00:16:49,745 是。 327 00:16:49,745 --> 00:16:51,830 难道我们要删除TMP2 / B? 328 00:16:51,830 --> 00:16:52,840 是。 329 00:16:52,840 --> 00:16:55,170 现在,我们要删除 目录TMP2? 330 00:16:55,170 --> 00:16:56,040 是。 331 00:16:56,040 --> 00:16:58,410 所以现在的目录 和里面的一切 332 00:16:58,410 --> 00:16:59,660 它已被删除。 333 00:16:59,660 --> 00:17:02,850 334 00:17:02,850 --> 00:17:07,250 >> 有技术上的命令RMDIR 您可以用它来去除 335 00:17:07,250 --> 00:17:11,670 目录,但它仅适用 在空目录反正。 336 00:17:11,670 --> 00:17:14,109 并且一看就知道,我们只 再做MKDIR,TMP2。 337 00:17:14,109 --> 00:17:15,940 TMP2,触摸。 338 00:17:15,940 --> 00:17:16,800 确定。 339 00:17:16,800 --> 00:17:22,770 所以,如果我尝试删除dirtmp2,它​​会 说,目录不是空的。 340 00:17:22,770 --> 00:17:29,540 所以,我几乎从来没有使用remove dir命令无论如何,因为RM,破折号, 341 00:17:29,540 --> 00:17:35,140 r会为其工作的空目录 和非空目录。 342 00:17:35,140 --> 00:17:37,760 >> 还有,如果我不希望有 经历了整个过程 343 00:17:37,760 --> 00:17:40,720 降入目录,并 删除每个单独的文件,RM, 344 00:17:40,720 --> 00:17:44,190 破折号,RF,TMP2。 345 00:17:44,190 --> 00:17:45,670 而现在它不见了。 346 00:17:45,670 --> 00:17:51,220 >> 东西要小心 关于为rm,破折号,RF。 347 00:17:51,220 --> 00:17:53,660 它让我害怕,甚至键入它, 因为如果我不小心 348 00:17:53,660 --> 00:17:55,090 按Enter键或东西。 349 00:17:55,090 --> 00:18:02,735 所以,RM,破折号,RF,波浪会,不 提示我,F不提示 350 00:18:02,735 --> 00:18:05,670 我,它会自动删除 我的整个主目录和 351 00:18:05,670 --> 00:18:06,780 一切都在它。 352 00:18:06,780 --> 00:18:11,460 所以,你可能认为这是 一个愚蠢的事情。 353 00:18:11,460 --> 00:18:12,830 很好,它是。 354 00:18:12,830 --> 00:18:18,600 >> 但它可以通过很容易出现 意外,如果说,我想删除 355 00:18:18,600 --> 00:18:21,640 我的斜线,虚拟主机目录。 356 00:18:21,640 --> 00:18:26,610 而就在快速打字, 我不小心这样做。 357 00:18:26,610 --> 00:18:31,880 这将递归删除我的两个 主目录和虚拟主机目录 358 00:18:31,880 --> 00:18:35,450 这个特定的目录中,仅仅 恰好不存在现在。 359 00:18:35,450 --> 00:18:39,520 但是,这仍然会删除 我的整个主目录。 360 00:18:39,520 --> 00:18:43,090 至少是没有一个f, 它会先提示我。 361 00:18:43,090 --> 00:18:45,670 我会想,哦,不,我 不想做。 362 00:18:45,670 --> 00:18:50,570 但是,人们,斜线,包括 我往往会得到进 363 00:18:50,570 --> 00:18:53,090 习惯总是RF-ING。 364 00:18:53,090 --> 00:18:58,713 即使是常规文件,我可以只RM, C,我倾向于只RM,破折号,RF,C。 365 00:18:58,713 --> 00:19:01,330 只是要小心,当你RF-ING。 366 00:19:01,330 --> 00:19:03,160 >> 扬声器4:什么是c执行? 367 00:19:03,160 --> 00:19:11,570 >> 罗伯:C被我说的是C文件 在此目录中,即RM,C。 368 00:19:11,570 --> 00:19:15,730 >> 约瑟夫:而更危险的是,如果你使用 一个明星,它是指在一切 369 00:19:15,730 --> 00:19:16,450 的目录。 370 00:19:16,450 --> 00:19:20,040 所以我通常倾向于做是我会的 进入一个目录,我想 371 00:19:20,040 --> 00:19:21,510 除去在那里的所有文件。 372 00:19:21,510 --> 00:19:23,640 所以,RM,破折号,RF,明星。 373 00:19:23,640 --> 00:19:25,700 >> 罗伯:是啊。 374 00:19:25,700 --> 00:19:26,780 室,破折号,RF,明星。 375 00:19:26,780 --> 00:19:29,530 >> 约瑟夫:如果你不小心 你在哪个目录 - 376 00:19:29,530 --> 00:19:33,340 我是不是临时的,但我还是不小心 在我的主目录, 377 00:19:33,340 --> 00:19:35,450 然后我会删除一切 在我的主目录。 378 00:19:35,450 --> 00:19:39,095 而我实际上做到这一点之前,和 我觉得你还是以前做过这 379 00:19:39,095 --> 00:19:40,640 周杰伦之前做到这一点。 380 00:19:40,640 --> 00:19:42,480 >> 罗伯:我不小心删除 - 381 00:19:42,480 --> 00:19:44,480 所以忽略该命令为位。 382 00:19:44,480 --> 00:19:45,800 >> 乔瑟夫:不好玩。 383 00:19:45,800 --> 00:19:52,650 >> 罗伯:所以在斜线bin目录是一个 一串二进制文件,其中有会 384 00:19:52,650 --> 00:19:54,840 熟悉的像铛。 385 00:19:54,840 --> 00:20:00,740 好了,铛,基本上所有这些 我在命令正在运行的东西 386 00:20:00,740 --> 00:20:02,060 线是在这个斜线bin目录下。 387 00:20:02,060 --> 00:20:03,090 >> 约瑟夫:像LS是在这里。 388 00:20:03,090 --> 00:20:06,285 >> 罗伯:那么点,斜线,LS会 列出该目录。 389 00:20:06,285 --> 00:20:08,120 >> 约瑟夫:室也是在这个目录中。 390 00:20:08,120 --> 00:20:12,770 >> 罗伯:我不小心RM,RF,海关斌, 其中删除任何命令我可以 391 00:20:12,770 --> 00:20:14,380 可能是有史以来想要的。 392 00:20:14,380 --> 00:20:18,085 然后我刚刚重新安装 新的电器在该点。 393 00:20:18,085 --> 00:20:20,170 >> 乔瑟夫:所以要非常小心,当 使用此命令。 394 00:20:20,170 --> 00:20:21,120 >> 观众:[听不清]? 395 00:20:21,120 --> 00:20:22,640 >> 罗伯:是的。 396 00:20:22,640 --> 00:20:24,135 这也是一个不好的习惯进入。 397 00:20:24,135 --> 00:20:27,920 398 00:20:27,920 --> 00:20:30,170 如果你注意到,我现在 - 399 00:20:30,170 --> 00:20:33,580 好了,你不能看到,但 我使用zoom-in,也许可以。 400 00:20:33,580 --> 00:20:35,360 所以,我现在根@设备。 401 00:20:35,360 --> 00:20:39,790 所以jharvard是我们想要的用户 你总是可以使用。 402 00:20:39,790 --> 00:20:43,820 根是具有权限的用户 做任何事情绝。 403 00:20:43,820 --> 00:20:50,260 >> 所以请注意,当我jharvard, 如果我尝试到CD - 404 00:20:50,260 --> 00:20:52,461 什么是目录? 405 00:20:52,461 --> 00:20:53,980 哦,根是一个很好的例子。 406 00:20:53,980 --> 00:20:54,950 所以CD,根。 407 00:20:54,950 --> 00:20:56,030 权限被拒绝。 408 00:20:56,030 --> 00:21:00,060 因为如果我们看一下此房源 - 409 00:21:00,060 --> 00:21:02,410 又一次,你不必 完全理解这一点。 410 00:21:02,410 --> 00:21:09,210 但是这三个破折号都这么说 没有让任何其他 411 00:21:09,210 --> 00:21:11,120 用户进入这个目录。 412 00:21:11,120 --> 00:21:14,540 并且该目录恰好 由root用户所拥有。 413 00:21:14,540 --> 00:21:20,310 >> 所以,我其实jharvard无 一个谁不是root允许进入 414 00:21:20,310 --> 00:21:23,490 这个目录,这意味着我 会得到权限被拒绝时,我 415 00:21:23,490 --> 00:21:25,160 试试cd到它。 416 00:21:25,160 --> 00:21:31,370 所以,当我的根,我有权限 绝对做任何事情,包括 417 00:21:31,370 --> 00:21:34,660 删除重要文件 在电器和 418 00:21:34,660 --> 00:21:36,640 毁掉整个事情。 419 00:21:36,640 --> 00:21:41,240 >> 所以这是一个不好的习惯进入 只是四处游荡的 420 00:21:41,240 --> 00:21:43,650 操作系统的根。 421 00:21:43,650 --> 00:21:46,520 我反正做。 422 00:21:46,520 --> 00:21:48,710 有问题吗? 423 00:21:48,710 --> 00:21:52,230 我会退出的根,留为jharvard。 424 00:21:52,230 --> 00:21:54,510 确定。 425 00:21:54,510 --> 00:21:55,820 >> 更多相关的命令。 426 00:21:55,820 --> 00:22:03,975 所以,要回我们的温度时, mv命令代表的举动。 427 00:22:03,975 --> 00:22:05,450 您可以移动。 428 00:22:05,450 --> 00:22:07,610 现在,我们要叫它B, 所以现在它称为B。 429 00:22:07,610 --> 00:22:10,650 或者,也许我们要移动 B上涨一个目录。 430 00:22:10,650 --> 00:22:12,730 所以,现在这个目录是空的。 431 00:22:12,730 --> 00:22:15,410 我将回到我的主目录, 我们看到,b为在这里,因为 432 00:22:15,410 --> 00:22:19,230 主目录是从一个目录了 是B曾经所在的目录。 433 00:22:19,230 --> 00:22:24,710 434 00:22:24,710 --> 00:22:26,580 >> 还有CP。 435 00:22:26,580 --> 00:22:33,210 因此,CP是复制的超级节, 点,文字。 436 00:22:33,210 --> 00:22:35,750 我可以调用它s,点,文字。 437 00:22:35,750 --> 00:22:39,780 现在我们有两个超级节, 点,文字,和s,点,文字。 438 00:22:39,780 --> 00:22:41,340 这也适用于目录。 439 00:22:41,340 --> 00:22:44,040 440 00:22:44,040 --> 00:22:46,560 我RF,海关单个文件。 441 00:22:46,560 --> 00:22:48,200 因此,CP - 442 00:22:48,200 --> 00:22:51,710 好了,首先让我们来试试CP,TMP,TMP2。 443 00:22:51,710 --> 00:22:53,220 所以省略tmp目录。 444 00:22:53,220 --> 00:22:57,440 如此相似RM,默认行为 是对目录不起作用。 445 00:22:57,440 --> 00:23:01,570 >> 再次,类似RM,默认 行为 - 好,得到它的工作 446 00:23:01,570 --> 00:23:04,230 使用目录是一个,破折号-R的路程。 447 00:23:04,230 --> 00:23:09,240 所以递归复制该温度 目录复制到TMP2。 448 00:23:09,240 --> 00:23:13,700 所以现在我们有两个tmp目录和tmp2 那是不是有益的,因为TMP 449 00:23:13,700 --> 00:23:16,814 是空摆在首位。 450 00:23:16,814 --> 00:23:18,660 TMP2。 451 00:23:18,660 --> 00:23:22,680 >> 现在,让我们tmp目录复制到TMP2。 452 00:23:22,680 --> 00:23:27,900 而且我们看到,TMP2还具有文件 一,因为目录和 453 00:23:27,900 --> 00:23:32,220 一切的那里面 目录被复制。 454 00:23:32,220 --> 00:23:36,000 而这可能有点帮助 如果说你的工作 455 00:23:36,000 --> 00:23:38,860 在问题设置1 - 456 00:23:38,860 --> 00:23:41,320 或者实际上,后来问题集 更为重要的,因为有 457 00:23:41,320 --> 00:23:43,660 将一大堆 文件和事情。 458 00:23:43,660 --> 00:23:47,010 >> 但你只是想,对于一个分裂 第二,你喜欢,没事,我 459 00:23:47,010 --> 00:23:50,210 要尝试不同的东西。 460 00:23:50,210 --> 00:23:57,860 让我复制我的整个PSET1 目录复制到PSET1备份,这样如果 461 00:23:57,860 --> 00:24:01,490 我最终搞砸的事情了,我可以 返回到我的备份目录。 462 00:24:01,490 --> 00:24:07,340 还有更合适的方法 版本备份你的代码,但 463 00:24:07,340 --> 00:24:10,610 这始终是一个快速的方法来只是让 确保你有东西副本 464 00:24:10,610 --> 00:24:11,860 那你要修改。 465 00:24:11,860 --> 00:24:16,974 466 00:24:16,974 --> 00:24:27,090 >> 所以回声也是一次性的命令 一种sillily将只打印到 467 00:24:27,090 --> 00:24:31,540 命令行到底是什么 你想呼应。 468 00:24:31,540 --> 00:24:32,680 所以回声喜。 469 00:24:32,680 --> 00:24:35,420 我们将只打印喜。 470 00:24:35,420 --> 00:24:38,030 回声的hello world。 471 00:24:38,030 --> 00:24:39,800 我们将打印的hello world。 472 00:24:39,800 --> 00:24:44,350 这涉及到使用的时候你 启动合并命令。 473 00:24:44,350 --> 00:24:48,300 >> 再次,不要指望你完全 理解这一步,但它的 474 00:24:48,300 --> 00:24:49,910 看到的东西。 475 00:24:49,910 --> 00:24:52,470 然后,如果你对谷歌搜索的例子 或者你知道你想要做的 476 00:24:52,470 --> 00:24:55,030 的东西,它可以是有益的。 477 00:24:55,030 --> 00:24:59,020 因此,让我们作为一个例子, 所以LS,破折号,L。 478 00:24:59,020 --> 00:25:01,160 所以我在这里看到的输出 LS的,破折号,L。 479 00:25:01,160 --> 00:25:06,560 我说好,我想 存储到文件中。 480 00:25:06,560 --> 00:25:11,620 所有在这里的输出,我想 投入到一个单独的文件。 481 00:25:11,620 --> 00:25:16,080 >> 比符号更大所以这一点 就是我们要去打电话。 482 00:25:16,080 --> 00:25:18,570 我们的重定向 输出到文件中。 483 00:25:18,570 --> 00:25:21,680 让我们把文件等等,因为这是 我往往会在调用它。 484 00:25:21,680 --> 00:25:26,430 所以现在我们看到我们有一个 文件胡说就在这里。 485 00:25:26,430 --> 00:25:30,270 如果我打开它,我会看到它的 正是从这个命令的输出 486 00:25:30,270 --> 00:25:31,990 我只是跑。 487 00:25:31,990 --> 00:25:36,020 同样,你可以 - 488 00:25:36,020 --> 00:25:41,260 如果这是输出到一个文件中,这 从文件中获得输入。 489 00:25:41,260 --> 00:25:45,790 490 00:25:45,790 --> 00:25:47,050 什么是命令,我 - 491 00:25:47,050 --> 00:25:49,620 >> 约瑟夫:我想你可以用 少跌多,大概。 492 00:25:49,620 --> 00:25:53,031 >> 罗伯:但如何只少废话? 493 00:25:53,031 --> 00:25:53,930 我不知道。 494 00:25:53,930 --> 00:25:57,870 如果你进入这个场景,像 有pset时,它是很有用的。 495 00:25:57,870 --> 00:25:59,950 >> 约瑟夫:你可以管成回声。 496 00:25:59,950 --> 00:26:02,920 管道文件到回波看到它。 497 00:26:02,920 --> 00:26:04,060 >> 罗伯:这是管道。 498 00:26:04,060 --> 00:26:04,860 >> 约瑟夫:对不起。 499 00:26:04,860 --> 00:26:06,190 >> 罗伯:好吧。 500 00:26:06,190 --> 00:26:12,720 因此,这是输出到文件。 501 00:26:12,720 --> 00:26:18,700 这是从文件中获取文本 并把它交给该程序。 502 00:26:18,700 --> 00:26:20,560 而且你还可以看到这个家伙。 503 00:26:20,560 --> 00:26:24,410 因此,这是一次那种做两个。 504 00:26:24,410 --> 00:26:28,310 而实际上,我将介绍两个新 命令只是为了它的使用。 505 00:26:28,310 --> 00:26:33,060 >> 历史是一个方便的命令,这只是 将打印出的清单 506 00:26:33,060 --> 00:26:34,940 任何我曾经运行的命令行。 507 00:26:34,940 --> 00:26:38,290 所以,我们在这里看到的一切,我有 已经运行这整个时间。 508 00:26:38,290 --> 00:26:39,540 大量的LS的。 509 00:26:39,540 --> 00:26:41,570 510 00:26:41,570 --> 00:26:48,470 >> 而另一个有用的命令是grep的那 其目的是为了在搜索 511 00:26:48,470 --> 00:26:52,060 文字寻找模式,好了, 寻找任何你 512 00:26:52,060 --> 00:26:53,310 希望它去寻找。 513 00:26:53,310 --> 00:26:59,770 所以这里一个方便的用途是,比方说 我们要抓住历史。 514 00:26:59,770 --> 00:27:03,860 我要寻找的命令 在那里我 - 什么是 515 00:27:03,860 --> 00:27:05,000 有用的宝贝? 516 00:27:05,000 --> 00:27:06,898 >> 约瑟夫:[听不清]? 517 00:27:06,898 --> 00:27:09,710 >> 罗伯:还是让我们只是看所有 倒是,不管是什么原因。 518 00:27:09,710 --> 00:27:13,850 所以这是它的样子。 519 00:27:13,850 --> 00:27:15,560 而你也不必完全 理解这一点。 520 00:27:15,560 --> 00:27:20,570 但这个想法是在这里,历史是给 相同的输出它确实在这里 521 00:27:20,570 --> 00:27:25,030 在那里它打印出整个 一切我曾经运行的历史。 522 00:27:25,030 --> 00:27:27,030 然后我们又路过那个 - 523 00:27:27,030 --> 00:27:30,230 而不是将它打印到屏幕,这样, 我们要传递给 524 00:27:30,230 --> 00:27:34,640 命令grep的是寻找 字触摸的所有实例。 525 00:27:34,640 --> 00:27:40,280 >> 所以使用的这个组合 历史的工具和grep,我可以看到,OK, 526 00:27:40,280 --> 00:27:44,820 这里的所有的命令,我曾经 运行,这里是一个有点常见的一种。 527 00:27:44,820 --> 00:27:45,510 我们是在底部。 528 00:27:45,510 --> 00:27:47,930 并且它也给了我命令 我刚跑了有 529 00:27:47,930 --> 00:27:51,240 在它的词联系。 530 00:27:51,240 --> 00:27:58,500 但管道是一个非常有用的东西 用于组合多个程序。 531 00:27:58,500 --> 00:28:04,670 而实际上,这是为让快捷方式 我历史输出到文件等等,并 532 00:28:04,670 --> 00:28:10,190 让我用grep使用文件等等 因为我想看看了。 533 00:28:10,190 --> 00:28:13,460 所以管只是一个快捷方式 对于这两个命令。 534 00:28:13,460 --> 00:28:13,950 是。 535 00:28:13,950 --> 00:28:15,306 >> 扬声器4:[听不清]? 536 00:28:15,306 --> 00:28:16,556 >> 罗伯:是的。 537 00:28:16,556 --> 00:28:20,142 538 00:28:20,142 --> 00:28:21,110 什么是 - 539 00:28:21,110 --> 00:28:21,858 呵呵。 540 00:28:21,858 --> 00:28:24,820 让我们来测试一下。 541 00:28:24,820 --> 00:28:29,170 所以,猫,狗,鱼。 542 00:28:29,170 --> 00:28:33,770 所以我想给grep。 543 00:28:33,770 --> 00:28:37,680 短跑河,再次,将是 递归的,所以我想降下来 544 00:28:37,680 --> 00:28:38,870 所有目录。 545 00:28:38,870 --> 00:28:43,210 我想递归的grep对所有 - 让我暂时得到 546 00:28:43,210 --> 00:28:44,460 这一点的方式。 547 00:28:44,460 --> 00:28:48,650 548 00:28:48,650 --> 00:28:50,740 不理我。 549 00:28:50,740 --> 00:28:51,360 确定。 550 00:28:51,360 --> 00:28:56,740 >> 所以我想暂时用grep的 这个词的鱼的所有实例。 551 00:28:56,740 --> 00:29:00,510 所以在这里我在做什么是用grep搜索 递归的字鱼。 552 00:29:00,510 --> 00:29:05,410 和星意味着在所有的这些 此目录中的文件。 553 00:29:05,410 --> 00:29:08,930 因此,这给了我拒绝的权限, 因为这是不允许读 554 00:29:08,930 --> 00:29:10,060 特定的文件。 555 00:29:10,060 --> 00:29:14,040 但它在文件中,测试中发现的鱼。 556 00:29:14,040 --> 00:29:18,450 >> 我也可以说,具体而言,我只 想看看在文件等等,在 557 00:29:18,450 --> 00:29:19,580 这种情况下它不会找到任何东西。 558 00:29:19,580 --> 00:29:20,990 我只是想看看在文件,测试。 559 00:29:20,990 --> 00:29:22,240 它会找到鱼。 560 00:29:22,240 --> 00:29:25,980 561 00:29:25,980 --> 00:29:29,260 这是一个非常有用的命令 要知道一般。 562 00:29:29,260 --> 00:29:31,640 有一些替代品到grep 这被认为是更加 563 00:29:31,640 --> 00:29:36,780 程序员友好的,但我倾向于 仍然依傍的grep。 564 00:29:36,780 --> 00:29:38,030 有问题吗? 565 00:29:38,030 --> 00:29:39,965 566 00:29:39,965 --> 00:29:40,919 确定。 567 00:29:40,919 --> 00:29:42,520 >> 还有没有其他的命令? 568 00:29:42,520 --> 00:29:45,270 呵呵。 569 00:29:45,270 --> 00:29:48,370 只是一次性的一个,我始终 发现很有趣的卡尔。 570 00:29:48,370 --> 00:29:55,610 所以,当我在这个可爱的通知 全屏模式下,我没有最喜欢 571 00:29:55,610 --> 00:29:56,720 工具栏或任何东西。 572 00:29:56,720 --> 00:29:59,530 所以,卡尔只是给了我一个可爱的小 日历这是正确的 573 00:29:59,530 --> 00:30:02,380 现在断了,我假设。 574 00:30:02,380 --> 00:30:04,770 但可爱的小命令。 575 00:30:04,770 --> 00:30:06,540 >> 约瑟夫:这是[听不清]。 576 00:30:06,540 --> 00:30:09,170 你可能有其他的命令 看到包括铿锵而作。 577 00:30:09,170 --> 00:30:11,180 我们就去了他们 后面更详细。 578 00:30:11,180 --> 00:30:13,400 但是,如果你已经工作 在PSET,你应该 579 00:30:13,400 --> 00:30:15,160 熟悉这些。 580 00:30:15,160 --> 00:30:16,640 >> 罗伯:好吧。 581 00:30:16,640 --> 00:30:18,520 在命令行的东西有问题? 582 00:30:18,520 --> 00:30:22,450 583 00:30:22,450 --> 00:30:23,260 好的。 584 00:30:23,260 --> 00:30:27,416 因此,让我们进入到一些 C-相关的东西。 585 00:30:27,416 --> 00:30:28,666 变量的数学。 586 00:30:28,666 --> 00:30:39,078 587 00:30:39,078 --> 00:30:40,060 确定。 588 00:30:40,060 --> 00:30:45,230 所以就像我们有数学的划痕, 您还可以使用数学三中 589 00:30:45,230 --> 00:30:49,270 >> 在我们到达那个完全, 这样的变量。 590 00:30:49,270 --> 00:30:53,920 请记住,当你声明一个 如int X或浮动y,则变量 591 00:30:53,920 --> 00:30:56,710 必须给它之前键入 变量名。 592 00:30:56,710 --> 00:31:03,020 因此,我们已经看到了类型到目前为止是int, 浮点型,双,很长很长,我 593 00:31:03,020 --> 00:31:06,150 实际上不知道我们是否已经 看到这么远。 594 00:31:06,150 --> 00:31:07,700 >> 还有一些其他的。 595 00:31:07,700 --> 00:31:09,990 我们已经看到字符。 596 00:31:09,990 --> 00:31:13,920 有短,这是喜欢它的 相反的很长很长的地方是 597 00:31:13,920 --> 00:31:16,650 比小的整数。 598 00:31:16,650 --> 00:31:18,580 我们也看到字符串。 599 00:31:18,580 --> 00:31:23,070 那么,什么是特别的字符串? 600 00:31:23,070 --> 00:31:25,350 为什么我会说这是 不是很喜欢整型? 601 00:31:25,350 --> 00:31:27,030 >> 扬声器4:它并不真的存在。 602 00:31:27,030 --> 00:31:27,990 >> 罗伯:是啊。 603 00:31:27,990 --> 00:31:31,820 因此,我们有字符串的唯一理由 是因为当你这样做 604 00:31:31,820 --> 00:31:33,215 哈希,包括cs50.h. 605 00:31:33,215 --> 00:31:36,530 606 00:31:36,530 --> 00:31:42,670 我们会看到这样的例子以后 - 哦,那不处理好 - 607 00:31:42,670 --> 00:31:46,160 其中cs50.h正在做的事情 沿型的线 608 00:31:46,160 --> 00:31:49,230 闪避,焦炭星,字符串。 609 00:31:49,230 --> 00:31:53,280 >> 所以这是说,我们甚至不 知道一个char明星是什么呢。 610 00:31:53,280 --> 00:31:56,770 但是,这是说我们要的字符串。 611 00:31:56,770 --> 00:32:00,250 任何你已经使用字符串,你的地方 可以用字符明星已, 612 00:32:00,250 --> 00:32:04,670 这实际上是一个类型, 存在于C语言。 613 00:32:04,670 --> 00:32:06,680 但我们会到达那个。 614 00:32:06,680 --> 00:32:07,860 哦,它会马上回来。 615 00:32:07,860 --> 00:32:10,170 整齐。 616 00:32:10,170 --> 00:32:15,370 >> 所以,同样的事情与布尔 其中真假。 617 00:32:15,370 --> 00:32:22,510 这是不是真的在C的内置型 相反,它只是,这是否有 618 00:32:22,510 --> 00:32:23,740 零值? 619 00:32:23,740 --> 00:32:26,200 然后,我们将只考虑 它是假的。 620 00:32:26,200 --> 00:32:27,350 这是否有值 - 621 00:32:27,350 --> 00:32:30,530 好了,这是否有任何 值不为零? 622 00:32:30,530 --> 00:32:32,200 然后,我们将认为这是正确的。 623 00:32:32,200 --> 00:32:35,940 所以,有一个为真,二是真实的, 任何非零为真。 624 00:32:35,940 --> 00:32:38,710 625 00:32:38,710 --> 00:32:42,790 因此,这些都是那些。 626 00:32:42,790 --> 00:32:47,624 在声明变量的问题和 变量类型和所有? 627 00:32:47,624 --> 00:32:48,100 是啊。 628 00:32:48,100 --> 00:32:52,384 >> 扬声器4:对于长很长,在书中, 它说,它必须是long long int的。 629 00:32:52,384 --> 00:32:54,288 但也只是很长很长的工作? 630 00:32:54,288 --> 00:32:58,210 631 00:32:58,210 --> 00:33:01,470 >> 罗伯:所以这些类型修饰符。 632 00:33:01,470 --> 00:33:04,170 所以诠释x。 633 00:33:04,170 --> 00:33:07,710 所以我们也可以说无符号诠释x。 634 00:33:07,710 --> 00:33:09,640 我们可以说短诠释x。 635 00:33:09,640 --> 00:33:12,570 我们可以说,很长很长诠释x。 636 00:33:12,570 --> 00:33:17,250 但这些东西几乎任何我 刚才说了,无符号整型,短整型, 637 00:33:17,250 --> 00:33:21,480 long long int的,你可以摆脱 int和它只是假设 638 00:33:21,480 --> 00:33:22,510 那你的意思是int类型。 639 00:33:22,510 --> 00:33:26,045 所以无符号x,它只是意味着 - 640 00:33:26,045 --> 00:33:29,400 你知道如何正常使用int, 你可以说x等于负3? 641 00:33:29,400 --> 00:33:31,636 用一个无符号整数,你不能。 642 00:33:31,636 --> 00:33:34,480 >> 约瑟夫:再次,对于摄像头, 问题是,有什么区别 643 00:33:34,480 --> 00:33:37,796 长的长整型之间 和公正的很长很长? 644 00:33:37,796 --> 00:33:38,410 >> 罗伯:是啊。 645 00:33:38,410 --> 00:33:42,850 所以,我几乎从来不会 写的很长很长整型。 646 00:33:42,850 --> 00:33:44,100 我会写很长很长。 647 00:33:44,100 --> 00:33:47,770 648 00:33:47,770 --> 00:33:50,636 >> 约瑟夫:有问题吗? 649 00:33:50,636 --> 00:33:51,886 >> 罗伯:确定。 650 00:33:51,886 --> 00:33:56,180 651 00:33:56,180 --> 00:34:02,390 那真是太傻了一点提醒是如何 我们声明一个变量并初始化 652 00:34:02,390 --> 00:34:04,450 变量和声明其他 变量和初始化 653 00:34:04,450 --> 00:34:05,870 这一切在一个步骤。 654 00:34:05,870 --> 00:34:09,370 变量如此的声明和 初始化变量没有 655 00:34:09,370 --> 00:34:11,120 到,但可以在同一条线上。 656 00:34:11,120 --> 00:34:15,409 657 00:34:15,409 --> 00:34:20,060 >> 因此,我们有标准的数学运算符 你已经习惯了 - 658 00:34:20,060 --> 00:34:22,199 加,减,除,次。 659 00:34:22,199 --> 00:34:24,389 还有模,我们拭目以待。 660 00:34:24,389 --> 00:34:29,060 没有的话,至少在 C,一个内置电源 661 00:34:29,060 --> 00:34:31,765 幂^操作符。 662 00:34:31,765 --> 00:34:33,770 嗯,有一个插入符号运算符, 但它不是权力。 663 00:34:33,770 --> 00:34:34,239 >> 约瑟夫:但它不是幂, 是。 664 00:34:34,239 --> 00:34:36,210 >> 罗伯:不要使用插入符号 假定它是指 665 00:34:36,210 --> 00:34:39,980 像方或什么的。 666 00:34:39,980 --> 00:34:42,289 所以有些事情保持 介意师。 667 00:34:42,289 --> 00:34:46,282 668 00:34:46,282 --> 00:34:48,880 我会受不了。 669 00:34:48,880 --> 00:34:51,315 如此宣布初始化的答案。 670 00:34:51,315 --> 00:34:54,670 所以,我们说浮动答案 等于1除以10。 671 00:34:54,670 --> 00:34:57,500 打印答案到小数点后两位。 672 00:34:57,500 --> 00:35:02,180 >> 这就是这种东西,我 将男人的printf弄清楚, 673 00:35:02,180 --> 00:35:05,110 这到底是什么%,网点,2F是什么意思? 674 00:35:05,110 --> 00:35:07,930 而这只是意味着,好吧, 无视0.2。 675 00:35:07,930 --> 00:35:10,420 和%f是用什么 打印浮动。 676 00:35:10,420 --> 00:35:15,370 0.2是说,复印件 浮到小数点后两位。 677 00:35:15,370 --> 00:35:19,600 所以这个程序有一个bug,你可能会 已经在一些见过这个 678 00:35:19,600 --> 00:35:20,870 前政务司司长课程。 679 00:35:20,870 --> 00:35:22,170 但是,什么是错误? 680 00:35:22,170 --> 00:35:23,050 >> 扬声器5:零。 681 00:35:23,050 --> 00:35:24,130 >> 罗伯:是啊。 682 00:35:24,130 --> 00:35:29,630 所以,当我们说,答案等于 1除以10,我们想要的 683 00:35:29,630 --> 00:35:31,610 回答是0.1。 684 00:35:31,610 --> 00:35:37,450 但1除以10,图1是 整数,10是一个整数。 685 00:35:37,450 --> 00:35:41,060 所以当我们做一个整数除以 一个整数,我们要拿回 686 00:35:41,060 --> 00:35:42,190 的整数。 687 00:35:42,190 --> 00:35:43,660 因此,1除以10是0.1。 688 00:35:43,660 --> 00:35:46,760 >> 因为它需要给我们一个整数, 它只是要扔掉 689 00:35:46,760 --> 00:35:49,410 小数位,说 答案是0。 690 00:35:49,410 --> 00:35:55,314 所以当我们打印的答案, 这将打印0.00。 691 00:35:55,314 --> 00:35:58,430 >> 约瑟夫:而且,正如一个音符,它实际上 扔掉什么后 692 00:35:58,430 --> 00:35:59,390 小数点。 693 00:35:59,390 --> 00:36:03,180 所以,如果你不是有6除以10, 你可能会认为它会给你 694 00:36:03,180 --> 00:36:05,200 0.6,然后你会四舍五入到1。 695 00:36:05,200 --> 00:36:10,520 但实际上,当输入发生了什么 任务,那就是它滴是什么 696 00:36:10,520 --> 00:36:11,470 小数点后。 697 00:36:11,470 --> 00:36:13,020 所以0.6也变为0。 698 00:36:13,020 --> 00:36:13,370 >> 罗伯:是啊。 699 00:36:13,370 --> 00:36:15,160 我们会说截断了点。 700 00:36:15,160 --> 00:36:21,760 所以每当你强制转换为int, 小数将被截断。 701 00:36:21,760 --> 00:36:23,980 因此,对于该修复 - 有 其实是两个。 702 00:36:23,980 --> 00:36:27,890 而我要做的那一秒,因为 这个是一个很容易修复。 703 00:36:27,890 --> 00:36:32,670 >> 因此,一个解决办法是使用浮点数 在分裂。 704 00:36:32,670 --> 00:36:34,720 真的,你只需要 让其中一人的持股量。 705 00:36:34,720 --> 00:36:37,400 但它的有些只是更清晰 让他们都浮在水上。 706 00:36:37,400 --> 00:36:41,170 因此,1.0除以10.0是 划分两个浮点数。 707 00:36:41,170 --> 00:36:43,970 因此,答案最终会被 一个浮点数,所以你会 708 00:36:43,970 --> 00:36:48,050 正确打印0.10这里。 709 00:36:48,050 --> 00:36:52,220 >> 一些不工作这么好 大约也就是,嗯,当然,这是很容易 710 00:36:52,220 --> 00:36:56,240 够转换1至 通过使1.0浮动。 711 00:36:56,240 --> 00:37:02,180 但是,如果不是我们有两个整数 如int x等于1和诠释y 712 00:37:02,180 --> 00:37:05,660 等于10,然后我们想 以做X除以Y' 713 00:37:05,660 --> 00:37:10,420 因此它是不容易的刚 做X.0什么的。 714 00:37:10,420 --> 00:37:12,790 >> 所以要修复被铸造。 715 00:37:12,790 --> 00:37:19,780 所以铸件是用C来转换方式 从1变到另一种。 716 00:37:19,780 --> 00:37:22,320 因此,这里,图1是一个整数。 717 00:37:22,320 --> 00:37:27,050 并把这个浮在眼前 它,我们是铸造1为float。 718 00:37:27,050 --> 00:37:30,350 所以这将转换 在1至1.0。 719 00:37:30,350 --> 00:37:33,380 这将转换 在10至10.0。 720 00:37:33,380 --> 00:37:36,790 >> 然后事情的行为类似于 我们只是表明以前的版本 721 00:37:36,790 --> 00:37:42,190 其中,符合市场预期,我们得到0.10 它会打印。 722 00:37:42,190 --> 00:37:44,120 我们可以做到这一点 变量,也。 723 00:37:44,120 --> 00:37:47,376 所以我们可以说,浮x 通过浮动Ÿ分。 724 00:37:47,376 --> 00:37:48,626 >> 约瑟夫:有问题吗? 725 00:37:48,626 --> 00:37:54,182 726 00:37:54,182 --> 00:38:00,090 >> 罗伯:所以,就像在常规的数学, 我们有运算符优先级。 727 00:38:00,090 --> 00:38:06,960 因此,在数学课上,你就更有可能 调用它的操作顺序。 728 00:38:06,960 --> 00:38:09,890 在这里,官方用语是 运算符优先级。 729 00:38:09,890 --> 00:38:15,230 但是,运算符优先级,或最 运营商,是你所期望的。 730 00:38:15,230 --> 00:38:22,660 >> 所以,就像在数学,2次10 将要超过密切分组 731 00:38:22,660 --> 00:38:25,410 这10除以2,然后2。 732 00:38:25,410 --> 00:38:29,745 操作的顺序,它会做2 次10,10除以2,然后 733 00:38:29,745 --> 00:38:32,720 它会做20加5加2。 734 00:38:32,720 --> 00:38:37,020 所以它的预期效果,您可以使用 括号把表达式分组。 735 00:38:37,020 --> 00:38:41,063 你不能使用方括号 分组表达式。 736 00:38:41,063 --> 00:38:41,544 是吗? 737 00:38:41,544 --> 00:38:43,468 >> 你居然能:喇叭5 只是回去一下吗? 738 00:38:43,468 --> 00:38:47,316 你可以投一个int为字符串? 739 00:38:47,316 --> 00:38:53,330 >> 罗伯:那么在C中,你可以投什么 你要你想要的任何东西。 740 00:38:53,330 --> 00:38:55,600 这并不意味着它是 一个好的事情。 741 00:38:55,600 --> 00:38:59,760 所以,当你施放一个int到 一个字符串,即表示 - 742 00:38:59,760 --> 00:39:03,240 我们将进入这个 更彻底 - 743 00:39:03,240 --> 00:39:03,720 >> 约瑟夫:晚得多。 744 00:39:03,720 --> 00:39:06,840 >> 罗伯:我不想很久以后说, 所以我试图改变我的句子。 745 00:39:06,840 --> 00:39:13,370 我们将进入它更彻底 以后如果真的是当你有一个 746 00:39:13,370 --> 00:39:14,810 字符串变量 - 747 00:39:14,810 --> 00:39:17,160 所以一个字符串可以是任意 长,对不对? 748 00:39:17,160 --> 00:39:21,850 我们一直在说,一个int 四个字节和long long是八 749 00:39:21,850 --> 00:39:23,620 字节和浮子是4个字节。 750 00:39:23,620 --> 00:39:29,520 所以一个字符串,就像一个int,只有 一定数目的字节到它的。 751 00:39:29,520 --> 00:39:31,800 而这将是四个字节。 752 00:39:31,800 --> 00:39:34,750 >> 但一个字符串可以很 任意长,对不对? 753 00:39:34,750 --> 00:39:40,190 等你好了世界上已经,如果这是10 字符或什么的,这已经 754 00:39:40,190 --> 00:39:42,670 将要在4个字节 我可以放入一个字符串。 755 00:39:42,670 --> 00:39:51,140 所以如何将字符串真正的工作是, 他们是在内存中的字符串 756 00:39:51,140 --> 00:39:52,380 被保留。 757 00:39:52,380 --> 00:39:57,290 >> 所以在这里,当我说串X 等于的hello world,X里面是 758 00:39:57,290 --> 00:40:01,840 只是说,哦,你好,世界存储 在内存中这个特殊的地方。 759 00:40:01,840 --> 00:40:07,060 因此,如果我们尝试将整数转换为 字符串,然后我们试图解读 760 00:40:07,060 --> 00:40:10,500 内存部分随机部分 作为一个字符串。 761 00:40:10,500 --> 00:40:14,465 而且几乎总是打破的东西。 762 00:40:14,465 --> 00:40:17,040 >> 约瑟夫:但是,如果,混淆 您,我们将覆盖它 763 00:40:17,040 --> 00:40:17,550 更深入的后面。 764 00:40:17,550 --> 00:40:17,850 >> 罗伯:是啊。 765 00:40:17,850 --> 00:40:20,540 这就是你要去的地方 进入指针。 766 00:40:20,540 --> 00:40:25,485 那就是显著​​块 二周课程的。 767 00:40:25,485 --> 00:40:28,275 >> 扬声器6:它的工作状物体 在其他语言或不是真的? 768 00:40:28,275 --> 00:40:34,050 >> 罗伯:那么在其他语言中,对象 会使用指针来表示。 769 00:40:34,050 --> 00:40:37,070 770 00:40:37,070 --> 00:40:38,793 这是不一样的东西,虽然。 771 00:40:38,793 --> 00:40:42,110 772 00:40:42,110 --> 00:40:42,910 有什么想法? 773 00:40:42,910 --> 00:40:43,760 >> 约瑟夫:号 774 00:40:43,760 --> 00:40:44,185 没有思想。 775 00:40:44,185 --> 00:40:44,980 >> 罗伯:确定。 776 00:40:44,980 --> 00:40:46,994 >> 约瑟夫:下一步。 777 00:40:46,994 --> 00:40:48,255 >> 罗伯:刚去这一点。 778 00:40:48,255 --> 00:40:48,670 好的。 779 00:40:48,670 --> 00:40:51,120 所以模。 780 00:40:51,120 --> 00:40:53,900 就像我们有加,减, 分裂和繁殖。 781 00:40:53,900 --> 00:40:56,720 所以模是一个你可以 以前没看过。 782 00:40:56,720 --> 00:40:59,540 它只是说,给 的我的其余部分。 783 00:40:59,540 --> 00:41:02,850 所以55%10。 784 00:41:02,850 --> 00:41:06,840 在做55的余数 由10将是5。 785 00:41:06,840 --> 00:41:09,630 所以55%10 5。 786 00:41:09,630 --> 00:41:12,260 和3%5是3。 787 00:41:12,260 --> 00:41:14,180 8%8将0。 788 00:41:14,180 --> 00:41:15,903 16%15将是1。 789 00:41:15,903 --> 00:41:20,670 >> 约瑟夫:有一点要注意这一点, 也就是它如预期可能无法正常工作 790 00:41:20,670 --> 00:41:22,700 如果你使用一个负数。 791 00:41:22,700 --> 00:41:26,215 因此,负5%4,有些人 可能会认为那就是 - 792 00:41:26,215 --> 00:41:28,890 793 00:41:28,890 --> 00:41:33,808 你会怎么想负 5%4会是什么? 794 00:41:33,808 --> 00:41:34,792 >> 扬声器5:一。 795 00:41:34,792 --> 00:41:37,920 >> 乔瑟夫:所以有些人说的, 有人说消极的。 796 00:41:37,920 --> 00:41:38,450 但是 - 797 00:41:38,450 --> 00:41:40,820 >> 罗伯:我什至不会有 说其中的一个。 798 00:41:40,820 --> 00:41:42,370 >> 约瑟夫:二,对不起。 799 00:41:42,370 --> 00:41:43,240 有人说 - 800 00:41:43,240 --> 00:41:43,450 >> 罗伯:三。 801 00:41:43,450 --> 00:41:43,800 >> 约瑟夫:三? 802 00:41:43,800 --> 00:41:44,890 >> 罗伯:负 - 803 00:41:44,890 --> 00:41:45,950 究竟是什么 - 负5 - 804 00:41:45,950 --> 00:41:47,100 >> 约瑟夫:三,三,三。 805 00:41:47,100 --> 00:41:48,450 抱歉。 806 00:41:48,450 --> 00:41:51,910 因为模,通常,当你已经 看到它在其他地方,这通常意味着 807 00:41:51,910 --> 00:41:54,000 返回一个正数,对不对? 808 00:41:54,000 --> 00:42:01,160 >> 罗伯:所以当我们说数学,10%的, 他们往往想给你 - 809 00:42:01,160 --> 00:42:05,980 如果我们国防部10,那么我们预期 得到0到9之间的数字。 810 00:42:05,980 --> 00:42:09,860 在这里,这不是这种情况,你 将得到负数返回。 811 00:42:09,860 --> 00:42:15,898 >> 乔瑟夫:所以负5% 4将是负1。 812 00:42:15,898 --> 00:42:19,325 >> 罗伯:但它是罕见的,你是MOD-ING 负数开始。 813 00:42:19,325 --> 00:42:25,490 814 00:42:25,490 --> 00:42:25,970 跳过此。 815 00:42:25,970 --> 00:42:27,314 >> 约瑟夫:是啊。 816 00:42:27,314 --> 00:42:29,420 >> 罗伯:MEH。 817 00:42:29,420 --> 00:42:29,990 确定。 818 00:42:29,990 --> 00:42:36,400 所以最后一件事要指出有关 彩车是它是一个危险的行为, 819 00:42:36,400 --> 00:42:39,850 但花车是不是一个确切的 表示。 820 00:42:39,850 --> 00:42:46,190 所以回到字节一遍,记住 那一个int总是有四个字节,一个 821 00:42:46,190 --> 00:42:47,830 浮总是四个字节。 822 00:42:47,830 --> 00:42:51,340 所以卢卡斯的例子是相当不错的。 823 00:42:51,340 --> 00:42:55,730 >> 因此,认为1除以3。 824 00:42:55,730 --> 00:42:57,800 所以0.3333333。 825 00:42:57,800 --> 00:43:03,540 如果我只有32位,怎么能 我保存0.33333到底是什么? 826 00:43:03,540 --> 00:43:07,250 也许,不管什么原因,你说, 好吧,好吧,让我们只说 827 00:43:07,250 --> 00:43:13,210 这个特殊的1011001,让我们 只是说,应该是0.333333。 828 00:43:13,210 --> 00:43:16,960 那么,你只有有限数量的 这些位,所以这是不可能的 829 00:43:16,960 --> 00:43:22,550 代表每一个浮点 鉴于只有32位值。 830 00:43:22,550 --> 00:43:25,580 >> 嗯,这是不可能代表任何 浮点值给出无限 - 831 00:43:25,580 --> 00:43:28,480 还有,由于位中的任何数量有限。 832 00:43:28,480 --> 00:43:38,265 因此,这里的问题是,好了,当我们用 打印到小数点后两位, 833 00:43:38,265 --> 00:43:42,000 我们没有得到正确的答案0.10。 834 00:43:42,000 --> 00:43:47,510 但引擎盖下,它是真正 被存储尽可能接近到 835 00:43:47,510 --> 00:43:51,790 0.10那些位可以代表。 836 00:43:51,790 --> 00:43:53,200 这是对下一张幻灯片? 837 00:43:53,200 --> 00:43:53,830 或者,是不是? 838 00:43:53,830 --> 00:43:54,660 >> 约瑟夫:是啊,就是这样。 839 00:43:54,660 --> 00:43:55,750 >> 罗伯:Blegh,blegh。 840 00:43:55,750 --> 00:43:57,760 >> 约瑟夫:是啊,你可以只 拉笔记了一下。 841 00:43:57,760 --> 00:43:59,700 >> 罗伯:我只是要放大 中的最后一个上。 842 00:43:59,700 --> 00:44:00,950 哦,我的天哪,这是[听不清]。 843 00:44:00,950 --> 00:44:06,089 844 00:44:06,089 --> 00:44:08,300 使数。 845 00:44:08,300 --> 00:44:12,300 这就是将要打印 如果我们运行该程序。 846 00:44:12,300 --> 00:44:20,340 并请注意,这不是一个真正的大问题 如果我们只关心像 847 00:44:20,340 --> 00:44:21,920 两到三个小数位。 848 00:44:21,920 --> 00:44:26,700 像我们最初只印刷0.10, 这就是为什么我们看到什么不对。 849 00:44:26,700 --> 00:44:31,380 但是,一旦我们开始渐入 确切的说,确切的数字,它是 850 00:44:31,380 --> 00:44:35,660 代表,我们看到,它不能 完全代表0.1。 851 00:44:35,660 --> 00:44:40,900 >> 在这里,问题的一部分是喜欢, 没事,这很好,但是,好吧, 852 00:44:40,900 --> 00:44:46,120 首先,如果我们试图做的, 答案等于等于0.1? 853 00:44:46,120 --> 00:44:49,200 是要返回true或false? 854 00:44:49,200 --> 00:44:51,850 因此,这很难说。 855 00:44:51,850 --> 00:44:53,330 我认为它实际上可能返回true。 856 00:44:53,330 --> 00:44:55,265 它会先 - 857 00:44:55,265 --> 00:44:56,180 我不知道。 858 00:44:56,180 --> 00:45:00,090 答案是,一旦你开始处理 与浮点值,你漂亮 859 00:45:00,090 --> 00:45:05,150 很多不应该使用相等 因为这种不精确性。 860 00:45:05,150 --> 00:45:09,470 >> 而对于所有你知道,它的百 小数位的 861 00:45:09,470 --> 00:45:13,670 浮点无法 正确处理。 862 00:45:13,670 --> 00:45:18,180 所以平等只会失败,甚至 虽然数 - 如果你已经 863 00:45:18,180 --> 00:45:24,450 用确切的数字,该数字应 已经完全一样。 864 00:45:24,450 --> 00:45:27,790 一切都结束了的像50的过​​程 使用这些浮动的计算 865 00:45:27,790 --> 00:45:30,270 点值,误差可以建立 起来,起来,起​​来, 866 00:45:30,270 --> 00:45:31,125 事情就出错。 867 00:45:31,125 --> 00:45:33,870 >> 约瑟夫:还有一直很 这种情况发生的著名的例子。 868 00:45:33,870 --> 00:45:37,190 像美国航空航天局的工程师们获得这样的 错了,造成火箭爆炸的 869 00:45:37,190 --> 00:45:38,665 他们已经发动后的空气。 870 00:45:38,665 --> 00:45:41,490 和很多类似的问题。 871 00:45:41,490 --> 00:45:41,956 所以,是的。 872 00:45:41,956 --> 00:45:45,218 >> 扬声器6:当你说0.3楼 它截断的休息吗? 873 00:45:45,218 --> 00:45:46,468 抑或是一轮上涨或下跌? 874 00:45:46,468 --> 00:45:48,800 875 00:45:48,800 --> 00:45:50,200 >> 罗伯:请问printf的圆吗? 876 00:45:50,200 --> 00:45:52,180 >> 约瑟夫:我认为printf的截断。 877 00:45:52,180 --> 00:45:52,640 >> 罗伯:确定。 878 00:45:52,640 --> 00:45:59,890 所以,我们同样可以走向反面 这其中的方向,在这种情况下, 879 00:45:59,890 --> 00:46:03,320 它可以代表最接近 0.1是用这个号码。 880 00:46:03,320 --> 00:46:06,820 它或许能在最接近 表示0.2是在相反的 881 00:46:06,820 --> 00:46:11,420 方向,0.199999996356 什么的。 882 00:46:11,420 --> 00:46:17,480 所以,如果我们去的那个方向 的东西,然后printf的0.3 F.将返回 883 00:46:17,480 --> 00:46:20,866 1.99,而不是2.00。 884 00:46:20,866 --> 00:46:22,960 >> 约瑟夫:我也完全不 确定这一点。 885 00:46:22,960 --> 00:46:25,430 你可能想要写一个小的,小 程序只是检查。 886 00:46:25,430 --> 00:46:29,370 >> 罗伯:虽然,我们所肯定的是, 如果你试图强制转换成一个 887 00:46:29,370 --> 00:46:33,660 int和铸造为int是要 导致它截断小数,如果 888 00:46:33,660 --> 00:46:38,140 您尝试转换1.9999999 为int,您将获得1。 889 00:46:38,140 --> 00:46:41,440 所以你通常应该使用 轮函数的数学函数库。 890 00:46:41,440 --> 00:46:44,190 891 00:46:44,190 --> 00:46:45,440 有问题吗? 892 00:46:45,440 --> 00:46:47,660 893 00:46:47,660 --> 00:46:48,982 确定。 894 00:46:48,982 --> 00:46:54,000 >> 乔瑟夫:所以,移动到条件 和布尔表达式。 895 00:46:54,000 --> 00:46:58,120 所以,你以前见过这些。 896 00:46:58,120 --> 00:47:07,420 而实际上,让我确保我 电脑是正确的格式在这里。 897 00:47:07,420 --> 00:47:08,670 空间。 898 00:47:08,670 --> 00:47:10,630 899 00:47:10,630 --> 00:47:13,870 对不起,我们将不得不面对一个 与截止点点的边缘。 900 00:47:13,870 --> 00:47:15,830 >> 但是,是的,你们已经看到 这之前,在划痕。 901 00:47:15,830 --> 00:47:19,930 所以这里这个权利是一个表达式 这是用来在 902 00:47:19,930 --> 00:47:21,250 一个条件语句。 903 00:47:21,250 --> 00:47:23,930 所以回答大于零的意志 告诉你,真或假。 904 00:47:23,930 --> 00:47:26,530 这些都是非常重要的,因为 他们允许我们介绍 905 00:47:26,530 --> 00:47:28,670 逻辑到我们的代码。 906 00:47:28,670 --> 00:47:32,820 >> 因此,例如,这是一个程序 写在刮,要求用户 907 00:47:32,820 --> 00:47:36,980 为一个整数,并告诉他们是否 整数,他们给你是一个 908 00:47:36,980 --> 00:47:38,690 正数或负数。 909 00:47:38,690 --> 00:47:42,980 和转换在这里看到的是 你先打印出报表, 910 00:47:42,980 --> 00:47:43,870 给我一个整数。 911 00:47:43,870 --> 00:47:45,980 然后你问他们一个整数。 912 00:47:45,980 --> 00:47:49,870 >> 然后使用条件逻辑在 在这里,检查该号码是否 913 00:47:49,870 --> 00:47:52,030 实际上比为零或不大于。 914 00:47:52,030 --> 00:47:58,960 所以在这里,我们有一个布尔表达式 里面的条件If语句。 915 00:47:58,960 --> 00:48:00,660 有什么问题吗? 916 00:48:00,660 --> 00:48:03,030 是否有关于什么问题吗? 917 00:48:03,030 --> 00:48:03,950 确定。 918 00:48:03,950 --> 00:48:06,140 >> 因此,有不止 比,当然,更大。 919 00:48:06,140 --> 00:48:10,385 你可以构造布尔表达式 使用大多数的各种各样的事情你 920 00:48:10,385 --> 00:48:11,150 会想到数学。 921 00:48:11,150 --> 00:48:12,370 因此大于。 922 00:48:12,370 --> 00:48:13,740 这应该是一个小于。 923 00:48:13,740 --> 00:48:14,990 抱歉。 924 00:48:14,990 --> 00:48:18,520 925 00:48:18,520 --> 00:48:19,760 和间距。 926 00:48:19,760 --> 00:48:22,971 >> 罗伯:上帝保佑你离开它。 927 00:48:22,971 --> 00:48:23,620 >> 约瑟夫:好吧。 928 00:48:23,620 --> 00:48:25,950 这样比,小于,大于更大 大于或等于,小于 929 00:48:25,950 --> 00:48:27,070 大于或等于。 930 00:48:27,070 --> 00:48:31,980 我们使用双等号检查 平等,因为单等于手段 931 00:48:31,980 --> 00:48:32,810 分配,对不对? 932 00:48:32,810 --> 00:48:33,140 是。 933 00:48:33,140 --> 00:48:37,130 然后我们也可以不等于由 使用感叹号,等于。 934 00:48:37,130 --> 00:48:41,530 >> 而这个感叹号符号可以 也可以扩展,这样,如果你想 935 00:48:41,530 --> 00:48:44,050 颠倒任何形式的布尔 表达式,你可以做到这一点。 936 00:48:44,050 --> 00:48:48,530 因此,这将评估为true 只有当回答为少 937 00:48:48,530 --> 00:48:51,240 大于或等于零。 938 00:48:51,240 --> 00:48:53,950 上有问题吗? 939 00:48:53,950 --> 00:48:55,180 确定。 940 00:48:55,180 --> 00:48:58,840 >> 所以,你也可以将这些 使用逻辑与和表达式 941 00:48:58,840 --> 00:48:59,790 逻辑或。 942 00:48:59,790 --> 00:49:03,530 所以,这只是和符号, 这应该是平移,7。 943 00:49:03,530 --> 00:49:07,720 这是管道符号,这是 不是小写L.这是一个 944 00:49:07,720 --> 00:49:09,440 这是正确的上方的Enter键。 945 00:49:09,440 --> 00:49:12,870 所以你使用其中的两个象征 逻辑的逻辑或。 946 00:49:12,870 --> 00:49:18,180 >> 因此,这将只返回true,如果答案 是一个,两个,三个或四个。 947 00:49:18,180 --> 00:49:23,030 这将只返回true,如果答案 超出该两侧。 948 00:49:23,030 --> 00:49:26,190 所以它不是一个,两个,三个或四个。 949 00:49:26,190 --> 00:49:28,385 并且你会使用的方式 在一个表达式 - 950 00:49:28,385 --> 00:49:29,990 >> 罗伯:或零或五。 951 00:49:29,990 --> 00:49:32,200 >> 约瑟夫:零或五。 952 00:49:32,200 --> 00:49:32,380 抱歉。 953 00:49:32,380 --> 00:49:33,320 是的,是的,是的。 954 00:49:33,320 --> 00:49:34,180 确定。 955 00:49:34,180 --> 00:49:38,980 而在这里现在,同样的方式,你 将使用该表达式,一个较小的 956 00:49:38,980 --> 00:49:42,000 的如果条件表达式侧 声明中,你也会使用它 957 00:49:42,000 --> 00:49:47,800 同样的方式通过只把它的内部 If语句的括号中。 958 00:49:47,800 --> 00:49:54,020 因此,这将printf的只有火,如果答案 是一个,两个,三个或四个。 959 00:49:54,020 --> 00:49:56,002 结合上有任何问题 表达式? 960 00:49:56,002 --> 00:50:00,450 961 00:50:00,450 --> 00:50:04,240 >> 因此,有另一个条件 构建体,我们称之为一个if / else语句。 962 00:50:04,240 --> 00:50:08,120 所以基本上,这意味着现在好不好,如果 我想要的东西,检查是不是 963 00:50:08,120 --> 00:50:11,600 真的,然后去Else和 执行其他动作。 964 00:50:11,600 --> 00:50:15,570 因此,在这种特殊情况下,我问 用户的一个整数。 965 00:50:15,570 --> 00:50:17,790 是大于零的整数? 966 00:50:17,790 --> 00:50:18,310 是吗? 967 00:50:18,310 --> 00:50:20,100 好吧,那么他们选 一个正数。 968 00:50:20,100 --> 00:50:22,320 如果没有,那么它必须有 是负或零。 969 00:50:22,320 --> 00:50:27,530 所以,你选择了一个负数 或者在此情况下为零。 970 00:50:27,530 --> 00:50:29,235 是。 971 00:50:29,235 --> 00:50:30,485 或零。 972 00:50:30,485 --> 00:50:36,320 973 00:50:36,320 --> 00:50:39,300 >> 然后我们也有if / else语句, 如果和其他人。 974 00:50:39,300 --> 00:50:45,640 因此,这可以让我们执行的顺序 事情只有首当其冲失败。 975 00:50:45,640 --> 00:50:49,540 因此,在这种情况下,我们现在正在做的 最后一个你挑为零。 976 00:50:49,540 --> 00:50:53,080 所以,如果他们既不挑了积极的,也不 一个负数,那么他们必须 977 00:50:53,080 --> 00:50:53,640 纷纷拿起为零。 978 00:50:53,640 --> 00:50:56,720 因此,它只是下降的 链条是这样的。 979 00:50:56,720 --> 00:50:59,960 >> 如何在这样一个例子 如果是从不同的 - 980 00:50:59,960 --> 00:51:02,590 一个if / else语句是不同的 只是一个序列IFS的。 981 00:51:02,590 --> 00:51:07,680 这是一个常见的​​问题, 人们问的是,好吧,如果你得到一个像 982 00:51:07,680 --> 00:51:11,265 95 CS50,又会此 程序告诉你吗? 983 00:51:11,265 --> 00:51:12,600 >> 扬声器5:你有一个A。 984 00:51:12,600 --> 00:51:13,490 >> 约瑟夫:是的。 985 00:51:13,490 --> 00:51:14,960 你得到的每一个 其中的一个权利。 986 00:51:14,960 --> 00:51:17,130 你有一个A,你有一个B,你 得到了一个C和D,对不对? 987 00:51:17,130 --> 00:51:19,770 因此,所有这些得到评估 为了。 988 00:51:19,770 --> 00:51:23,570 因此,虽然95大于90,它的 比80也更大,这也是 989 00:51:23,570 --> 00:51:25,790 大于70,它的 也大于60。 990 00:51:25,790 --> 00:51:27,620 所以,你得到了所有这些成绩的。 991 00:51:27,620 --> 00:51:31,630 我相信,你会 只希望A。 992 00:51:31,630 --> 00:51:34,060 >> 要解决这一问题的方法是更换 那些否则/如果的。 993 00:51:34,060 --> 00:51:37,540 所以在这种情况下,它看到的是95 大于90,然后它 994 00:51:37,540 --> 00:51:38,885 不评价其他地区 的语句。 995 00:51:38,885 --> 00:51:41,900 996 00:51:41,900 --> 00:51:43,150 关于什么问题吗? 997 00:51:43,150 --> 00:51:48,580 998 00:51:48,580 --> 00:51:52,470 >> 因此,有另一个条件排序 结构,我们在这里,我们 999 00:51:52,470 --> 00:51:53,390 调用一个switch语句。 1000 00:51:53,390 --> 00:51:57,390 因此,这可以让你基本检查 怎样的一个数字,你把价值 1001 00:51:57,390 --> 00:51:59,000 进入switch语句。 1002 00:51:59,000 --> 00:52:03,200 所以在这种情况下,我们切换 于n,和我们说,哦,如果n为 1003 00:52:03,200 --> 00:52:04,710 一个,然后打印该报表。 1004 00:52:04,710 --> 00:52:07,910 再突破,这意味着退出 出了switch语句。 1005 00:52:07,910 --> 00:52:12,670 >> 如果它不是一个,那么,很好,只是 最后检查所有的这些情况。 1006 00:52:12,670 --> 00:52:16,280 所以它会检查是否它的一个或两个或 三,它打印相应。 1007 00:52:16,280 --> 00:52:19,780 什么这个默认的关键字到这里 方法是,如果他们没有进入任何 1008 00:52:19,780 --> 00:52:21,690 那些,然后说无效。 1009 00:52:21,690 --> 00:52:25,910 因此,让我们说,我问n和 用户给我四。 1010 00:52:25,910 --> 00:52:29,470 那么,它没有匹配的那些情况下, 所以它会打印出什么在 1011 00:52:29,470 --> 00:52:30,540 默认段。 1012 00:52:30,540 --> 00:52:31,180 是的,质疑? 1013 00:52:31,180 --> 00:52:32,614 >> 扬声器5:你可以使用布尔 表达式代替 1014 00:52:32,614 --> 00:52:33,570 一个,两个,或三个? 1015 00:52:33,570 --> 00:52:36,940 >> 乔瑟夫:所以,问题是你能使用 布尔表达式,而不是一个, 1016 00:52:36,940 --> 00:52:37,940 二,三? 1017 00:52:37,940 --> 00:52:40,520 而在C中,我相信你 不能做到这一点。 1018 00:52:40,520 --> 00:52:44,320 但在其他语言中,你可能会 在遇到的结束 1019 00:52:44,320 --> 00:52:46,460 学期如JavaScript,你可以。 1020 00:52:46,460 --> 00:52:50,050 那么,你就必须先计算 该值,然后使用它在 1021 00:52:50,050 --> 00:52:50,650 switch语句。 1022 00:52:50,650 --> 00:52:50,930 是吗? 1023 00:52:50,930 --> 00:52:54,760 >> 罗伯:开关部分的利益所以 报表是想,如果你这样做 1024 00:52:54,760 --> 00:52:58,680 作为一个if / else语句,所以如果n等于像 等于一个或什么的。 1025 00:52:58,680 --> 00:53:00,300 其他/如果n等于等于二,什么的。 1026 00:53:00,300 --> 00:53:01,960 其他/如果n等于等于三。 1027 00:53:01,960 --> 00:53:05,930 这样的方式,程序将运行的是它 会按顺序往下走的列表 1028 00:53:05,930 --> 00:53:07,500 并检查是N吗? 1029 00:53:07,500 --> 00:53:08,040 不。 1030 00:53:08,040 --> 00:53:09,070 为n 2? 1031 00:53:09,070 --> 00:53:09,490 不。 1032 00:53:09,490 --> 00:53:10,940 为n 3? 1033 00:53:10,940 --> 00:53:11,710 是啊。 1034 00:53:11,710 --> 00:53:12,610 做到这一点。 1035 00:53:12,610 --> 00:53:15,270 >> 而用switch语句,它的 居然能够编译它是 1036 00:53:15,270 --> 00:53:16,360 真快。 1037 00:53:16,360 --> 00:53:19,550 而一旦它说开关,它 说,没事,n为2时,我 1038 00:53:19,550 --> 00:53:23,060 马上要跳的地方 我应该开始执行。 1039 00:53:23,060 --> 00:53:26,080 我不会先检查, 为n之一,N双? 1040 00:53:26,080 --> 00:53:28,860 它可以立即开始做 什么是应该做的。 1041 00:53:28,860 --> 00:53:33,830 >> 正因为如此,它不能 采取布尔条件。 1042 00:53:33,830 --> 00:53:36,480 否则将不得不这样做的 顺序一样,所有的权利,为n 1043 00:53:36,480 --> 00:53:37,820 大于零? 1044 00:53:37,820 --> 00:53:41,140 否则为n大于10或任何更高。 1045 00:53:41,140 --> 00:53:44,780 >> 约瑟夫:在这种情况下,如果你使用 if / else语句,如果的,则开关会 1046 00:53:44,780 --> 00:53:47,792 运行约3倍 比的if / else,如果速度更快。 1047 00:53:47,792 --> 00:53:53,060 1048 00:53:53,060 --> 00:53:56,040 我们可以组织开关在这样的 我们不分手的方式 1049 00:53:56,040 --> 00:53:57,520 之后每个案件。 1050 00:53:57,520 --> 00:54:00,960 因此,在这种情况下,我分隔 我们选择到一个和数字 1051 00:54:00,960 --> 00:54:04,250 两个是不高的数字和 三位的是大量的。 1052 00:54:04,250 --> 00:54:08,290 >> 因此,在这种情况下,如果n是1或2,它 会打的情况下,然后它会 1053 00:54:08,290 --> 00:54:10,640 告吹,因为 没有休息。 1054 00:54:10,640 --> 00:54:11,610 它会在这里结束。 1055 00:54:11,610 --> 00:54:15,360 因此,如果我们挑一个,它会做的printf 然后突破,这样的无 1056 00:54:15,360 --> 00:54:17,610 这被执行。 1057 00:54:17,610 --> 00:54:21,870 当然,如果他们在三个进入 还是其他什么东西,然后它会跳过 1058 00:54:21,870 --> 00:54:25,320 这些,而不是去那里,它 将执行的,而不是 1059 00:54:25,320 --> 00:54:27,490 相应的行。 1060 00:54:27,490 --> 00:54:29,390 是否有关于什么问题吗? 1061 00:54:29,390 --> 00:54:29,780 是吗? 1062 00:54:29,780 --> 00:54:32,642 >> 扬声器4:你会得到一个错误,如果你 有情况下,一前一后休息,但它 1063 00:54:32,642 --> 00:54:34,550 没有东西给它做? 1064 00:54:34,550 --> 00:54:37,820 >> 乔瑟夫:所以,问题是,你会得到 一个错误,如果你有后休息 1065 00:54:37,820 --> 00:54:39,730 案例一但有什么可以做? 1066 00:54:39,730 --> 00:54:41,520 答案是否定的。 1067 00:54:41,520 --> 00:54:43,172 你不会真正得到一个错误。 1068 00:54:43,172 --> 00:54:44,590 是啊,毫米嗯。 1069 00:54:44,590 --> 00:54:54,540 >> 作为排序的那么一点点这里的变化, 我打算把一个printf这里。 1070 00:54:54,540 --> 00:54:55,790 哎呦。 1071 00:54:55,790 --> 00:55:00,994 1072 00:55:00,994 --> 00:55:04,880 那么,什么会这样,如果打印 我把一个在输入? 1073 00:55:04,880 --> 00:55:07,530 1074 00:55:07,530 --> 00:55:07,770 是啊。 1075 00:55:07,770 --> 00:55:10,360 它会告诉你,它没有考虑 高数的两倍,对吗? 1076 00:55:10,360 --> 00:55:13,500 因为它会打的第一种情况下, 它不会打破,一下子就摔倒 1077 00:55:13,500 --> 00:55:15,730 通过向所述第二壳体。 1078 00:55:15,730 --> 00:55:16,950 关于什么问题吗? 1079 00:55:16,950 --> 00:55:18,280 >> 罗伯:你有别的问题? 1080 00:55:18,280 --> 00:55:20,840 >> 约瑟夫:好,冷却。 1081 00:55:20,840 --> 00:55:22,400 好的。 1082 00:55:22,400 --> 00:55:25,780 因此,有我们所说的别的东西 三元运算符这基本上是一个 1083 00:55:25,780 --> 00:55:29,010 替代语法干嘛 如果再别的。 1084 00:55:29,010 --> 00:55:30,470 它可以让你做这一切在同一行。 1085 00:55:30,470 --> 00:55:34,110 所以这个特定的程序中, 我问n的用户。 1086 00:55:34,110 --> 00:55:37,190 如果n大于100时,我告诉 他们,他们选择了一个高的数字。 1087 00:55:37,190 --> 00:55:39,560 别的我告诉他们,他们 挑一个低的数字。 1088 00:55:39,560 --> 00:55:43,030 >> 因此,我们可以用这个很长的语法, 字符串,S,然后检查是否n是 1089 00:55:43,030 --> 00:55:45,260 大于100,并分配 它相应。 1090 00:55:45,260 --> 00:55:49,450 但是,我们可以让这个更简洁 通过使用这个三元运算符语法 1091 00:55:49,450 --> 00:55:52,090 其中涉及的问题 标记和一个冒号。 1092 00:55:52,090 --> 00:55:55,070 所以问号本质上是 问一个问题,对不对? 1093 00:55:55,070 --> 00:55:56,625 >> 罗伯:或许放大了。 1094 00:55:56,625 --> 00:55:57,372 >> 约瑟夫:是的。 1095 00:55:57,372 --> 00:56:00,210 好点。 1096 00:56:00,210 --> 00:56:02,550 因此,这是三元运算符。 1097 00:56:02,550 --> 00:56:06,100 我首先要问的问题, 为n大于100? 1098 00:56:06,100 --> 00:56:09,770 如果是,那么我执行第一 冒号前的部分。 1099 00:56:09,770 --> 00:56:13,360 如果不是,那么我执行 在冒号后面第二部分。 1100 00:56:13,360 --> 00:56:16,640 因此,如果n大于100, 然后挑选高,看跌期权 1101 00:56:16,640 --> 00:56:18,360 那到字符串s。 1102 00:56:18,360 --> 00:56:22,170 如果n小于100,它选择低 进而提出了到字符串s。 1103 00:56:22,170 --> 00:56:30,186 因此,将这种凝结大块 成只是一条线。 1104 00:56:30,186 --> 00:56:32,010 >> 扬声器5:这是流行? 1105 00:56:32,010 --> 00:56:36,070 >> 约瑟夫:是的,这是很流行的 那里基本上你要的东西 1106 00:56:36,070 --> 00:56:38,700 做基于任务 某种条件。 1107 00:56:38,700 --> 00:56:43,110 在这种情况下,我们试图 到一个值赋给字符串s。 1108 00:56:43,110 --> 00:56:44,840 这不是那么 - 1109 00:56:44,840 --> 00:56:47,670 我想我真的不喜欢 但在其他情况下。 1110 00:56:47,670 --> 00:56:49,390 但它是特别有用 对于这项任务。 1111 00:56:49,390 --> 00:56:54,490 >> 罗伯:这是一个很常见的模式 在那里你有一些变量, 1112 00:56:54,490 --> 00:56:58,200 你会说,如果事情,设置 该变量为一个值,否则,设置 1113 00:56:58,200 --> 00:56:59,810 此变量为另一个值。 1114 00:56:59,810 --> 00:57:03,360 那就是场景 其中使用三元。 1115 00:57:03,360 --> 00:57:05,220 >> 约瑟夫:你是在救 很多行,对不对? 1116 00:57:05,220 --> 00:57:08,090 它只是使你的代码可以说是 更可读的一点点。 1117 00:57:08,090 --> 00:57:08,635 是的,质疑? 1118 00:57:08,635 --> 00:57:12,384 >> 扬声器6:对于三元,你能不能去, 字符串s等于S,问号? 1119 00:57:12,384 --> 00:57:15,280 然后你可以有,比方说, 五个不同的选项。 1120 00:57:15,280 --> 00:57:18,310 以及根据什么n的数目 是,你会选择其中的一个? 1121 00:57:18,310 --> 00:57:22,210 >> 乔瑟夫:所以,问题是,有没有 排序语法,你可以做字符串 1122 00:57:22,210 --> 00:57:25,910 s等于n,并且随后有两个以上的 那个问号的选项? 1123 00:57:25,910 --> 00:57:29,740 而一个简单的答案是否定的,有没有 真是一个好办法做到这一点,除非 1124 00:57:29,740 --> 00:57:33,850 要嵌套多个三元 彼此的内部运算符。 1125 00:57:33,850 --> 00:57:38,050 >> 你可以做如:n大于100, 问号,然后再 1126 00:57:38,050 --> 00:57:41,850 三元运算符中,n大于50, 问号,巢这种方式。 1127 00:57:41,850 --> 00:57:45,240 但在这种情况下,你的代码是 得到一种不可读和凌乱, 1128 00:57:45,240 --> 00:57:47,920 它可能是更好的只是去 一个if / else语句在这一点上。 1129 00:57:47,920 --> 00:57:54,530 >> 罗伯:还有,作为一个侧面说明,PHP 不正确地实现了三元 1130 00:57:54,530 --> 00:57:58,053 运营商这样嵌套的三元系 甚至不工作,因为他们应该。 1131 00:57:58,053 --> 00:57:58,840 >> 约瑟夫:是啊。 1132 00:57:58,840 --> 00:58:01,170 因此,它变得有点混乱, 尤其是当你去 1133 00:58:01,170 --> 00:58:02,145 以不同的语言。 1134 00:58:02,145 --> 00:58:04,810 >> 罗伯:这是迷惑,以至于 语言是错的。 1135 00:58:04,810 --> 00:58:08,030 1136 00:58:08,030 --> 00:58:11,510 >> 乔瑟夫:所以其实只是为了澄清, 每个人都知道那是什么 1137 00:58:11,510 --> 00:58:13,900 %s的确实在这里? 1138 00:58:13,900 --> 00:58:15,650 关于什么问题吗? 1139 00:58:15,650 --> 00:58:19,760 我猜只是相机,%s的 基本上让我们放一个占位符 1140 00:58:19,760 --> 00:58:20,790 为一个字符串。 1141 00:58:20,790 --> 00:58:23,920 然后到了最后,我们指定的 变量,我们希望把这个 1142 00:58:23,920 --> 00:58:25,500 占位符为s。 1143 00:58:25,500 --> 00:58:27,730 所以,基本上需要s 它把它在这里。 1144 00:58:27,730 --> 00:58:32,130 然后它会打印出来,你挑 高或你选择了一个低的数字。 1145 00:58:32,130 --> 00:58:33,770 确定。 1146 00:58:33,770 --> 00:58:36,970 >> 所以循环允许你执行的事情 在打圈,对不对? 1147 00:58:36,970 --> 00:58:40,300 你可能会在遇到此 在从无到有的永远的形式循环 1148 00:58:40,300 --> 00:58:45,650 或重复,直到或重复特定的 的次数。 1149 00:58:45,650 --> 00:58:47,540 那么,为什么这是对我们有好处? 1150 00:58:47,540 --> 00:58:51,500 那么,在C中,假设我们有这样的 在刮歌实施了 1151 00:58:51,500 --> 00:58:53,450 唱歌,这是歌曲 永远不会结束。 1152 00:58:53,450 --> 00:58:55,710 它只是和和 永远,永远。 1153 00:58:55,710 --> 00:58:59,395 好了,你真的不能让一个程序 具有printf的无限数量的 1154 00:58:59,395 --> 00:59:00,850 在它的报表,对不对? 1155 00:59:00,850 --> 00:59:04,900 >> 因此,在这种特定的情况下,单程 您可以进行这项工作, 1156 00:59:04,900 --> 00:59:09,330 让它永远印是 而不是使用一个while循环。 1157 00:59:09,330 --> 00:59:13,640 因此,一个While循环将执行什么 在两个支撑体是 1158 00:59:13,640 --> 00:59:17,250 属于它的依据是什么 条件是。 1159 00:59:17,250 --> 00:59:21,170 因此,在这个特定的例子之前,如果 我们要永远的打印本,有什么 1160 00:59:21,170 --> 00:59:23,590 也许我们做什么? 1161 00:59:23,590 --> 00:59:25,190 嗯,当然,对不对? 1162 00:59:25,190 --> 00:59:32,290 >> 所以,这样的结合的想法 一些布尔表达式 1163 00:59:32,290 --> 00:59:33,610 随着循环。 1164 00:59:33,610 --> 00:59:35,780 我们了解了布尔 表达式前面。 1165 00:59:35,780 --> 00:59:39,650 所以每当里面的条件 这虽然仍是如此,这个循环 1166 00:59:39,650 --> 00:59:41,480 将执行上和和。 1167 00:59:41,480 --> 00:59:44,640 在这种情况下,如果我们只是提供了 与真实的,这将导致无限 1168 00:59:44,640 --> 00:59:49,310 循环打印出的歌曲,并在 和我们之前没有期望 1169 00:59:49,310 --> 00:59:52,410 具有一个程序,有无限 的printf语句数目,这是 1170 00:59:52,410 --> 00:59:55,220 不可能的。 1171 00:59:55,220 --> 00:59:57,810 >> 所以更令人信服,不过, 你可以使用这个用 1172 00:59:57,810 --> 00:59:59,710 变量和条件。 1173 00:59:59,710 --> 01:00:04,420 因此,让我们说,我们要重复的 词组,完全充满循环,10倍。 1174 01:00:04,420 --> 01:00:08,380 所以,你可以用一个While循环做的是 你可以先初始化一个计数器 1175 01:00:08,380 --> 01:00:10,860 变量以外的 While循环到10。 1176 01:00:10,860 --> 01:00:14,360 然后基本上,每次你走 通过While循环,打印出 1177 01:00:14,360 --> 01:00:19,090 您降低语句,然后将 计数器变量,直到在最后, 1178 01:00:19,090 --> 01:00:23,020 在某些时候,当我们减去我不够 次,1次从我足够的时间 - 1179 01:00:23,020 --> 01:00:27,290 而只是为了澄清,我减减 意味着我等于I减1。 1180 01:00:27,290 --> 01:00:31,280 >> 这将基本上把我下到 点,一旦我打零,这 1181 01:00:31,280 --> 01:00:35,260 条件不再真实, 所以它退出圈外。 1182 01:00:35,260 --> 01:00:37,045 所以完全充满循环只打印10倍。 1183 01:00:37,045 --> 01:00:39,550 1184 01:00:39,550 --> 01:00:41,080 关于While循环有问题吗? 1185 01:00:41,080 --> 01:00:44,580 1186 01:00:44,580 --> 01:00:46,790 确定。 1187 01:00:46,790 --> 01:00:50,550 >> 因此,有一个办法,我们可以做什么,我们只是 在一个更简洁的方式与做 1188 01:00:50,550 --> 01:00:51,715 我们所说的For循环。 1189 01:00:51,715 --> 01:00:55,750 因此,一个For循环由一个 初始化的状态下,和一个 1190 01:00:55,750 --> 01:00:58,950 更新,就像我们以前有 在这个While循环。 1191 01:00:58,950 --> 01:00:59,890 因此,让我们一起来看看。 1192 01:00:59,890 --> 01:01:02,900 在这个while循环,我们有 初始化,然后我们有一个 1193 01:01:02,900 --> 01:01:04,260 调理,我们检查。 1194 01:01:04,260 --> 01:01:06,450 然后我们有一个更新 步骤在顶部。 1195 01:01:06,450 --> 01:01:10,060 >> 在fo​​r循环中,这主要取 这三样东西和它凝结 1196 01:01:10,060 --> 01:01:11,370 成一行。 1197 01:01:11,370 --> 01:01:15,130 因此,它确实在的第一件事 for循环的初始化。 1198 01:01:15,130 --> 01:01:19,090 然后,你做一个分号,然后 你做的条件,这是我 1199 01:01:19,090 --> 01:01:22,200 大于零去那边, 然后在更新步骤。 1200 01:01:22,200 --> 01:01:26,470 因此,这被在执行 循环体的最后一刻。 1201 01:01:26,470 --> 01:01:28,790 所以,这两个程序是 基本上是等价的。 1202 01:01:28,790 --> 01:01:31,960 1203 01:01:31,960 --> 01:01:33,870 >> 有问题吗? 1204 01:01:33,870 --> 01:01:37,000 那么,什么是一个区别 这两者之间? 1205 01:01:37,000 --> 01:01:38,000 任何人都可以指出来? 1206 01:01:38,000 --> 01:01:40,480 它可能是一个有点微妙。 1207 01:01:40,480 --> 01:01:41,930 这只是一个非常小的差异。 1208 01:01:41,930 --> 01:01:42,330 是吗? 1209 01:01:42,330 --> 01:01:49,008 >> 扬声器5:您将无法使用 For循环外的我变 1210 01:01:49,008 --> 01:01:49,962 [听不清]? 1211 01:01:49,962 --> 01:01:50,900 >> 约瑟夫:没错。 1212 01:01:50,900 --> 01:01:53,550 所以,这是我们会得到 后来被称为变量的作用域。 1213 01:01:53,550 --> 01:01:56,610 但本质上,这种诠释我的生活 这个while循环之外。 1214 01:01:56,610 --> 01:01:59,800 所以一旦这个while循环完成 执行时,我就可以在以后使用我 1215 01:01:59,800 --> 01:02:00,880 在该程序。 1216 01:02:00,880 --> 01:02:05,430 >> 而用这种For循环,这个INT I 作用域是这里面的for循环。 1217 01:02:05,430 --> 01:02:10,240 并且,因为它是该部分的内 For循环,即启动 1218 01:02:10,240 --> 01:02:13,200 在括号和结束 大括号那边。 1219 01:02:13,200 --> 01:02:16,120 这就是内声明的任何事情 这里不能被外部使用。 1220 01:02:16,120 --> 01:02:20,420 所以,如果我尝试使用外我,它会 告诉我,未申报的象征。 1221 01:02:20,420 --> 01:02:22,420 而且基本上,我不会 能够使用它。 1222 01:02:22,420 --> 01:02:28,460 >> 罗伯:和好了,10年前,在 从字面上所有的情况下,大括号 1223 01:02:28,460 --> 01:02:31,140 你用什么来确定 一个变量的范围。 1224 01:02:31,140 --> 01:02:37,240 所以在那里,INT I等于10 这里面声明 1225 01:02:37,240 --> 01:02:38,520 设置大括号。 1226 01:02:38,520 --> 01:02:42,530 所以这时只要您尝试使用我 这个大括号之前,它的罚款。 1227 01:02:42,530 --> 01:02:47,090 1228 01:02:47,090 --> 01:02:51,460 当你键入make您可能会看到,你 看破折号,破折号,标准,等于和C99。 1229 01:02:51,460 --> 01:02:57,100 >> 所以这是C以后的版本, 海湾合作委员会已实施也给 1230 01:02:57,100 --> 01:02:58,740 此快捷方式。 1231 01:02:58,740 --> 01:03:03,505 因此,这用于不能在C.允许和 你可以看到为什么,因为这个整数 1232 01:03:03,505 --> 01:03:07,600 我是这个大括号之外,但 它仍然被认为是在 1233 01:03:07,600 --> 01:03:09,750 这些大括号的范围。 1234 01:03:09,750 --> 01:03:14,120 但是,这是一个非常方便的事情, 所以它是一个很好的延伸。 1235 01:03:14,120 --> 01:03:15,370 >> 约瑟夫:有问题吗? 1236 01:03:15,370 --> 01:03:17,550 1237 01:03:17,550 --> 01:03:19,260 确定。 1238 01:03:19,260 --> 01:03:22,820 那么什么是更有益的是,有时 你想在那种活力 1239 01:03:22,820 --> 01:03:23,410 你的循环,对不对? 1240 01:03:23,410 --> 01:03:26,350 你不想只是必然打印 完全糊涂的所有的时间,你 1241 01:03:26,350 --> 01:03:28,650 要从倒计时 10什么的。 1242 01:03:28,650 --> 01:03:32,010 所以你可以使用计数器变量 那里面循环的为好。 1243 01:03:32,010 --> 01:03:35,530 在这种情况下,本程序只是 倒计时从10一路下跌下来。 1244 01:03:35,530 --> 01:03:39,260 它有什么不能打印? 1245 01:03:39,260 --> 01:03:42,790 它不打印零, 没错,因为当 - 1246 01:03:42,790 --> 01:03:45,460 是的,它也不会打印11。 1247 01:03:45,460 --> 01:03:49,200 >> 因此,它不打印零,因为当 我是零,请记住,它会评估 1248 01:03:49,200 --> 01:03:52,170 之前那张条件 执行循环体。 1249 01:03:52,170 --> 01:03:56,820 当我是零,这是假的,所以 它不会打印出倒计时 1250 01:03:56,820 --> 01:04:00,200 零,它只是打印出票 跌10一路下滑至1。 1251 01:04:00,200 --> 01:04:03,420 如果我们真的想要它打印为零, 然后我们会把等号 1252 01:04:03,420 --> 01:04:04,750 比后签订本更大。 1253 01:04:04,750 --> 01:04:09,400 1254 01:04:09,400 --> 01:04:10,130 确定。 1255 01:04:10,130 --> 01:04:16,410 >> 因此,一个办法做到的输入验证,这 是当你问用户做 1256 01:04:16,410 --> 01:04:18,620 什么,你要确保他们 按照您的指示,是使用 1257 01:04:18,620 --> 01:04:19,400 While循环,对不对? 1258 01:04:19,400 --> 01:04:22,990 因此,在这种特殊情况下,我在问 为正数,那么我 1259 01:04:22,990 --> 01:04:23,810 等待输入。 1260 01:04:23,810 --> 01:04:28,210 >> 然后我检查而输入 小于零,不断地问他们。 1261 01:04:28,210 --> 01:04:32,100 所以只要他们给我一个号码 这不是积极的,不断地问, 1262 01:04:32,100 --> 01:04:33,600 不停的问,不停的问。 1263 01:04:33,600 --> 01:04:35,860 但是,什么是有点儿奇怪这件事? 1264 01:04:35,860 --> 01:04:38,570 或似乎有什么不理想有关 这种结构在这里? 1265 01:04:38,570 --> 01:04:44,282 1266 01:04:44,282 --> 01:04:44,758 任何人吗? 1267 01:04:44,758 --> 01:04:45,234 是吗? 1268 01:04:45,234 --> 01:04:47,614 >> 扬声器6:你重复 该指令的两倍。 1269 01:04:47,614 --> 01:04:48,100 >> 乔瑟夫:对。 1270 01:04:48,100 --> 01:04:50,090 因此,我们有两个printf语句 在这里,对不对? 1271 01:04:50,090 --> 01:04:53,440 因此,有一个办法,我们可以得到这个刚 下降到一个会令我们的 1272 01:04:53,440 --> 01:04:57,170 代码更易于阅读和 更干净一点。 1273 01:04:57,170 --> 01:05:00,180 然后我们就不必 已取得在两次为好。 1274 01:05:00,180 --> 01:05:03,740 你也可以做到这一点的方法之一是 通过使用一个do-whil​​e循环。 1275 01:05:03,740 --> 01:05:07,670 >> 和do-whil​​e循环基本上是一个 不同形式的While循环在哪里 1276 01:05:07,670 --> 01:05:11,460 无论是在大括号内 被至少执行一次。 1277 01:05:11,460 --> 01:05:14,840 所以在这里,我宣布,整型 输入外第一。 1278 01:05:14,840 --> 01:05:18,100 然后,我只是说,这样做 指令同时输入 1279 01:05:18,100 --> 01:05:19,140 小于零。 1280 01:05:19,140 --> 01:05:20,530 所以,它击中先做。 1281 01:05:20,530 --> 01:05:24,190 它总是至少执行此 一次,所以它总是会询问用户 1282 01:05:24,190 --> 01:05:25,960 对于至少一次输入。 1283 01:05:25,960 --> 01:05:29,390 然后它计算的输入, 并且它继续了一圈。 1284 01:05:29,390 --> 01:05:30,135 是的,质疑? 1285 01:05:30,135 --> 01:05:32,602 >> 扬声器6:有没有办法做到这一点 [听不清]的类型,如果你说喜欢, 1286 01:05:32,602 --> 01:05:34,268 GetString的,有人[听不清] 1287 01:05:34,268 --> 01:05:35,220 是有办法[听不清] 1288 01:05:35,220 --> 01:05:40,060 >> 乔瑟夫:所以,问题是,有没有 这样做的输入验证,如果用户 1289 01:05:40,060 --> 01:05:41,850 不把正确的 变量的类型? 1290 01:05:41,850 --> 01:05:44,460 因此,如果我们要求一个int和他们 给我们一个字符串来代替。 1291 01:05:44,460 --> 01:05:49,110 而在我们实现的功能 对你来说,调用getInt是,GetString在所有的 1292 01:05:49,110 --> 01:05:52,680 这些功能,他们实际上已经 做那种基本类型的输入 1293 01:05:52,680 --> 01:05:54,120 引擎盖下验证。 1294 01:05:54,120 --> 01:05:57,390 所以,如果你正在使用的功能,我们 给了你,你真的没有来。 1295 01:05:57,390 --> 01:06:01,380 >> 但是,如果你想看起来更探讨如何 你其实可以做到这一点,你可以看看 1296 01:06:01,380 --> 01:06:03,360 罩在文件下I/O-- 1297 01:06:03,360 --> 01:06:07,990 不是一个文件,标准I / O函数 像一个从标准输入读取和 1298 01:06:07,990 --> 01:06:08,580 标准输出。 1299 01:06:08,580 --> 01:06:10,630 你可以得到一个更好的感觉 您可能如何做到这一点。 1300 01:06:10,630 --> 01:06:13,670 >> 罗伯:有一个问题,虽然是专门 用你的例子 1301 01:06:13,670 --> 01:06:17,070 说,你期望一个字符串 而我进入一个int。 1302 01:06:17,070 --> 01:06:20,110 你将如何分辨 故意想要的 1303 01:06:20,110 --> 01:06:23,130 串123对想要整型123? 1304 01:06:23,130 --> 01:06:29,230 这样的字符串,它几乎没有 验证,它只是不管他们 1305 01:06:29,230 --> 01:06:31,600 进入你将圆梦 作为一个字符串。 1306 01:06:31,600 --> 01:06:35,790 >> int是比较容易的,因为不管 输入你从用户,你是 1307 01:06:35,790 --> 01:06:37,470 始终以一个字符串。 1308 01:06:37,470 --> 01:06:40,650 所以该字符串就可以再 检查一下,是所有这些 1309 01:06:40,650 --> 01:06:44,218 实际上位数字? 1310 01:06:44,218 --> 01:06:45,170 >> 约瑟夫:确定。 1311 01:06:45,170 --> 01:06:46,420 大约一个do-whil​​e循环有问题吗? 1312 01:06:46,420 --> 01:06:49,170 >> 罗伯:哦,这也是 - 1313 01:06:49,170 --> 01:06:55,130 回去范围,一个比较常见的 错误是试图用一些当地的 1314 01:06:55,130 --> 01:06:59,540 从这个的do-whil​​e中变量 循环的这种情况下的内部。 1315 01:06:59,540 --> 01:07:02,850 而实际上,如果我们只是摆脱了 这一点,并说,INT输入等于 1316 01:07:02,850 --> 01:07:06,990 调用getInt,那么编译器会骂 我们,因为输入不存在 1317 01:07:06,990 --> 01:07:08,900 的范围之外的 这些大括号。 1318 01:07:08,900 --> 01:07:10,792 >> 约瑟夫:这就是为什么我们 需要这样的阵容在这里。 1319 01:07:10,792 --> 01:07:13,620 1320 01:07:13,620 --> 01:07:14,630 确定。 1321 01:07:14,630 --> 01:07:17,530 所以你也可以打出来的 循环初期,如果你想。 1322 01:07:17,530 --> 01:07:21,240 所以这是一个不同的方式 实施我们刚刚实施。 1323 01:07:21,240 --> 01:07:24,340 和,而不是使用条件 在括号内,我们使用了 1324 01:07:24,340 --> 01:07:26,920 如果身体的内部表 在do-whil​​e循环的。 1325 01:07:26,920 --> 01:07:30,000 >> 基本上,当输入最后 大于零,我们将 1326 01:07:30,000 --> 01:07:31,000 跳出循环。 1327 01:07:31,000 --> 01:07:33,420 因此,我们将全力以赴 一路下来这里。 1328 01:07:33,420 --> 01:07:37,920 而且你可以看到这会 可能是优选的这 1329 01:07:37,920 --> 01:07:39,870 情况下,因为它是一个小 有点清洁和一点点 1330 01:07:39,870 --> 01:07:41,380 位更容易阅读。 1331 01:07:41,380 --> 01:07:45,210 而这一类的,你 有多余的线条在里面。 1332 01:07:45,210 --> 01:07:47,890 这只是一点点丑陋, 我猜想,在某种意义上。 1333 01:07:47,890 --> 01:07:48,530 是的,质疑? 1334 01:07:48,530 --> 01:07:52,178 >> 扬声器4:将仅获得突破 你出一组大括号? 1335 01:07:52,178 --> 01:07:53,080 >> 乔瑟夫:对。 1336 01:07:53,080 --> 01:07:58,100 所以,问题是只破 让你出一个循环的? 1337 01:07:58,100 --> 01:07:59,280 答案是肯定的。 1338 01:07:59,280 --> 01:08:04,290 所以,如果你有嵌套的For循环,对于 举例来说,如果我有整型I等于0 1339 01:08:04,290 --> 01:08:09,040 直到10然后对于int j为0 直到10,如果我打出来的内在的 1340 01:08:09,040 --> 01:08:12,310 环,我还是会去 到外循环。 1341 01:08:12,310 --> 01:08:15,760 所以它会继续执行 操作在外面。 1342 01:08:15,760 --> 01:08:17,640 关于什么问题吗? 1343 01:08:17,640 --> 01:08:18,000 是吗? 1344 01:08:18,000 --> 01:08:21,760 >> 扬声器5:但只有突破功能 对大括号,而不是其他 1345 01:08:21,760 --> 01:08:22,230 报表? 1346 01:08:22,230 --> 01:08:22,700 [听不清] 1347 01:08:22,700 --> 01:08:27,620 >> 乔瑟夫:所以,问题是将打破 唯一的功能for循环,而不是 1348 01:08:27,620 --> 01:08:29,014 其他语句一样,如果? 1349 01:08:29,014 --> 01:08:32,950 是的,是这样的话,因为 你打破一个循环出来了吧, 1350 01:08:32,950 --> 01:08:33,630 在感。 1351 01:08:33,630 --> 01:08:37,215 >> 罗伯:在案件的绝大多数,这是 这是如果某样东西的那种, 1352 01:08:37,215 --> 01:08:37,660 然后打破。 1353 01:08:37,660 --> 01:08:41,580 所以,你不必打破申请 的如果是环绕着它。 1354 01:08:41,580 --> 01:08:45,250 而且,这并不是太大的环, 但请记住,开关也 1355 01:08:45,250 --> 01:08:46,340 通过断裂破碎出来的。 1356 01:08:46,340 --> 01:08:48,390 我们看到正在使用的中断 与切换前。 1357 01:08:48,390 --> 01:08:52,189 >> 约瑟夫:你也可以使用它们 在While循环和for循环。 1358 01:08:52,189 --> 01:08:54,560 有问题吗? 1359 01:08:54,560 --> 01:08:55,830 确定。 1360 01:08:55,830 --> 01:08:57,779 所以,接下来是功能。 1361 01:08:57,779 --> 01:09:01,500 所以,你可能已经使用了这些BYOB之一 块,将刮项目。 1362 01:09:01,500 --> 01:09:04,569 这基本上可以让 您可以定义一组 1363 01:09:04,569 --> 01:09:05,680 指令被执行。 1364 01:09:05,680 --> 01:09:09,569 >> 而我的意思是让我们觉得 回到数学,右,代数。 1365 01:09:09,569 --> 01:09:13,370 你有什么我们称之为x的函数, 一些变量,并假设本 1366 01:09:13,370 --> 01:09:16,080 函数是f的x等于x加5。 1367 01:09:16,080 --> 01:09:20,410 所以,你能想到前后x的,因为这黑色 框取15,然后 1368 01:09:20,410 --> 01:09:22,590 生产20。 1369 01:09:22,590 --> 01:09:26,630 >> 所以更一般地,一个功能是 的东西,需要一些投入和 1370 01:09:26,630 --> 01:09:27,880 然后产生一些输出。 1371 01:09:27,880 --> 01:09:31,920 1372 01:09:31,920 --> 01:09:32,960 以及为什么是功能好? 1373 01:09:32,960 --> 01:09:35,189 他们是很好的为一定数量的原因。 1374 01:09:35,189 --> 01:09:40,470 因此,没有人想采取刺 在组织什么意思? 1375 01:09:40,470 --> 01:09:42,630 在为什么功能方面都是有帮助吗? 1376 01:09:42,630 --> 01:09:43,090 是吗? 1377 01:09:43,090 --> 01:09:44,735 >> 扬声器4:它使你的 代码更具可读性。 1378 01:09:44,735 --> 01:09:45,399 >> 乔瑟夫:对。 1379 01:09:45,399 --> 01:09:47,670 这样的事情之一是它使 你的代码更易读,对不对? 1380 01:09:47,670 --> 01:09:53,710 而不必像诠释x等于x时 次x次X,我可以得x的立方, 1381 01:09:53,710 --> 01:09:57,190 这是更具可读性,更 可以理解的读者。 1382 01:09:57,190 --> 01:10:01,150 >> 组织也是来讲 把您的代码转换成可管理的 1383 01:10:01,150 --> 01:10:05,610 部分,因此,与其试图 实现这一切在一个长款 1384 01:10:05,610 --> 01:10:09,070 在主,你可以有点分裂它 成想,好,让我们写一个函数 1385 01:10:09,070 --> 01:10:11,910 多维数据集的东西,让我们写一个 功能为方形的东西。 1386 01:10:11,910 --> 01:10:15,950 这样,你可以把它分解成微小的, 小部分,你可以解决 1387 01:10:15,950 --> 01:10:18,944 而不是试图解决 一个很大的问题一下子。 1388 01:10:18,944 --> 01:10:21,806 >> 罗伯:甚至微小的,小零件 你和你的伴侣可以解决。 1389 01:10:21,806 --> 01:10:22,283 >> 约瑟夫:是啊。 1390 01:10:22,283 --> 01:10:23,855 >> 罗伯:所以不是两个 你想植入1 1391 01:10:23,855 --> 01:10:27,170 功能的同时。 1392 01:10:27,170 --> 01:10:28,800 >> 约瑟夫:简化。 1393 01:10:28,800 --> 01:10:30,050 有人想以此来猜测? 1394 01:10:30,050 --> 01:10:33,080 1395 01:10:33,080 --> 01:10:33,410 是吗? 1396 01:10:33,410 --> 01:10:34,675 >> 扬声器5:更多的重复。 1397 01:10:34,675 --> 01:10:35,260 >> 乔瑟夫:对。 1398 01:10:35,260 --> 01:10:39,210 这样一件事,你可以做 简化是它的排序上 1399 01:10:39,210 --> 01:10:42,520 相同的线作为可重用性是 有一次我写一个立方体函数,我可以 1400 01:10:42,520 --> 01:10:45,410 刚刚使用过,并一遍又一遍 又在我的程序,而不是打字 1401 01:10:45,410 --> 01:10:49,610 x次x次x在和 一遍又一遍。 1402 01:10:49,610 --> 01:10:52,980 和简化在这里也只是 意味着它使你的代码排序 1403 01:10:52,980 --> 01:10:55,900 一旦你分割更容易调试 这成函数。 1404 01:10:55,900 --> 01:10:58,250 因为这样你可以在那里本地化 排序您的问题。 1405 01:10:58,250 --> 01:11:00,910 1406 01:11:00,910 --> 01:11:02,160 有问题吗? 1407 01:11:02,160 --> 01:11:04,200 1408 01:11:04,200 --> 01:11:06,540 >> 所以另一个想法是抽象的,对不对? 1409 01:11:06,540 --> 01:11:07,390 这个黑匣子。 1410 01:11:07,390 --> 01:11:11,360 就像你知道什么调用getInt呢 以接收来自用户的输入? 1411 01:11:11,360 --> 01:11:12,510 我们还没有真正告诉你,对不对? 1412 01:11:12,510 --> 01:11:15,670 所有我们告诉你的是调用getInt呢 正是它说,它的作用。 1413 01:11:15,670 --> 01:11:18,440 所以,即使我们不告诉你如何 它的工作原理,你还是知道的。 1414 01:11:18,440 --> 01:11:21,670 >> 因此,在这种特殊情况下,这是 四重功能,不 1415 01:11:21,670 --> 01:11:24,520 不同的东西来输入 以产生一个输出。 1416 01:11:24,520 --> 01:11:28,050 而且你可以翻两番一个数字 通过将其乘以4。 1417 01:11:28,050 --> 01:11:30,790 或者您也可以就是我们所说的 位由两个移动它。 1418 01:11:30,790 --> 01:11:32,960 我们将讨论这 一点点后。 1419 01:11:32,960 --> 01:11:36,570 而且也没有必要知道如何 函数实际上只要工程,它 1420 01:11:36,570 --> 01:11:37,640 诚如作品。 1421 01:11:37,640 --> 01:11:40,740 >> 于是在引擎盖下,我可能是 像,返回输入倍 1422 01:11:40,740 --> 01:11:41,690 8除以二。 1423 01:11:41,690 --> 01:11:42,510 而你不知道吧? 1424 01:11:42,510 --> 01:11:44,970 所有你需要知道的是, 它做什么它说。 1425 01:11:44,970 --> 01:11:48,070 所以这是有用的东西 关于抽象。 1426 01:11:48,070 --> 01:11:52,910 >> 而另一件事是有点这样的想法 定位你的代码之一 1427 01:11:52,910 --> 01:11:54,280 特定部分。 1428 01:11:54,280 --> 01:11:57,450 所以,如果你有一个问题,你不 要走遍你的代码试图 1429 01:11:57,450 --> 01:11:58,730 解决那里的问题。 1430 01:11:58,730 --> 01:12:00,990 因此,在这种情况下,我实现 立方体错误的。 1431 01:12:00,990 --> 01:12:02,820 我想多维数据集乘以 三。 1432 01:12:02,820 --> 01:12:05,760 >> 所以在这种情况下,这是一个程序 只是已经由三个相乘 1433 01:12:05,760 --> 01:12:06,750 无处不在。 1434 01:12:06,750 --> 01:12:10,910 而且,还有另一个计划,有 保理立方体出成一个函数。 1435 01:12:10,910 --> 01:12:14,040 所以现在如果我想解决我的错 在这里,我必须要修好每一行 1436 01:12:14,040 --> 01:12:15,620 这个程序的代码。 1437 01:12:15,620 --> 01:12:19,190 而在另一方面,如果我用 功能,我只需要改变 1438 01:12:19,190 --> 01:12:20,650 在一个地方发生了什么事。 1439 01:12:20,650 --> 01:12:25,330 1440 01:12:25,330 --> 01:12:28,730 >> 因此,在计算机科学中,我们 调用的输入和输出。 1441 01:12:28,730 --> 01:12:31,640 输入被称为参数或 参数,并输出被称为 1442 01:12:31,640 --> 01:12:32,950 返回值。 1443 01:12:32,950 --> 01:12:39,000 我们将看到如何这可以帮助我们理清 在第二个定义一个函数。 1444 01:12:39,000 --> 01:12:41,430 所以这是一个函数定义 对于体积测量。 1445 01:12:41,430 --> 01:12:45,110 因此它需要一个输入,然后 它返回一个数字时代 1446 01:12:45,110 --> 01:12:47,020 本身三次。 1447 01:12:47,020 --> 01:12:48,020 因此,让我们打破这种分解。 1448 01:12:48,020 --> 01:12:53,090 >> 所以我们有一个函数头,其中 基本上由三件事情。 1449 01:12:53,090 --> 01:12:56,050 所以,我们有参数, 是,正如我前面所说的, 1450 01:12:56,050 --> 01:12:57,680 投入到这个功能。 1451 01:12:57,680 --> 01:12:59,300 然后我们给函数的名称。 1452 01:12:59,300 --> 01:13:00,740 在这种情况下,它被称为多维数据集。 1453 01:13:00,740 --> 01:13:03,860 然后,我们指定哪些类型 的返回值是。 1454 01:13:03,860 --> 01:13:06,760 >> 所以在这种情况下,我的立方体函数 取入的整数,并且它也 1455 01:13:06,760 --> 01:13:07,890 返回一个整数。 1456 01:13:07,890 --> 01:13:11,510 所以,如果我通过在二,二是整数, 它返回八到我,这 1457 01:13:11,510 --> 01:13:13,250 是一个整数。 1458 01:13:13,250 --> 01:13:15,420 因此,返回类型名称参数。 1459 01:13:15,420 --> 01:13:16,670 有关该问题? 1460 01:13:16,670 --> 01:13:19,440 1461 01:13:19,440 --> 01:13:24,230 >> 然后返回值实际上是 在最后说指定的回报 1462 01:13:24,230 --> 01:13:27,540 然后回到什么 包含返回值。 1463 01:13:27,540 --> 01:13:30,940 因此,在这种情况下,如果我们把它全部 同时,一个函数接受 1464 01:13:30,940 --> 01:13:35,100 参数,这就是所谓的东西, 它返回的东西是类型 1465 01:13:35,100 --> 01:13:36,350 我们说这将是。 1466 01:13:36,350 --> 01:13:39,830 1467 01:13:39,830 --> 01:13:41,080 有问题吗? 1468 01:13:41,080 --> 01:13:43,710 1469 01:13:43,710 --> 01:13:45,080 >> 那么,我们如何使用函数? 1470 01:13:45,080 --> 01:13:49,230 好了,我们写一个函数,然后 我们用它在我们的计划,对不对? 1471 01:13:49,230 --> 01:13:51,565 所以我把它称为多维数据集, 然后我可以使用多维数据集。 1472 01:13:51,565 --> 01:13:54,200 >> 但重要的是要注意 就是为了事宜。 1473 01:13:54,200 --> 01:13:58,100 如果我有以下主要的立方体,它的 要碰上立方体。 1474 01:13:58,100 --> 01:14:00,360 在这一点上,没有什么 所谓的魔方程序中,它的 1475 01:14:00,360 --> 01:14:02,550 只是要像,我有 不知道什么是立方体。 1476 01:14:02,550 --> 01:14:05,060 >> 因此,它会告诉你,隐 声明的函数。 1477 01:14:05,060 --> 01:14:06,690 这显示了错误。 1478 01:14:06,690 --> 01:14:10,230 所以在这种情况下,立方体低于 主要的,所以它不会 1479 01:14:10,230 --> 01:14:12,006 来了解一下吧。 1480 01:14:12,006 --> 01:14:14,724 >> 扬声器5:所以主要是通常 最后一个函数定义? 1481 01:14:14,724 --> 01:14:17,290 >> 乔瑟夫:所以,问题是, 是主要的通常是最后 1482 01:14:17,290 --> 01:14:18,170 你想定义的事情吗? 1483 01:14:18,170 --> 01:14:19,730 并没有。 1484 01:14:19,730 --> 01:14:22,280 这是因为我们通常喜欢主 要在顶部,对不对? 1485 01:14:22,280 --> 01:14:24,640 因为这是第一件事情你 希望程序员打开 1486 01:14:24,640 --> 01:14:25,640 程序,看看。 1487 01:14:25,640 --> 01:14:29,950 所以,我们如何解决这个问题,我们 想主要是在顶部,但 1488 01:14:29,950 --> 01:14:33,750 我们想要的功能,我们希望他们 将低于主还能够使用 1489 01:14:33,750 --> 01:14:34,930 他们的主要内? 1490 01:14:34,930 --> 01:14:36,870 >> 好了,我们用我们称之为 函数原型。 1491 01:14:36,870 --> 01:14:40,830 那么,什么函数原型本质 是被它首先需要什么 1492 01:14:40,830 --> 01:14:45,060 签名或函数头 什么我们要实现下降 1493 01:14:45,060 --> 01:14:47,420 在这里,我们把它放在 一个程序的顶部。 1494 01:14:47,420 --> 01:14:51,400 >> 因此,在这种情况下,我们说,好了, 后来在我们的节目中,我们将 1495 01:14:51,400 --> 01:14:55,010 作出承诺来实现这个 函数调用整型立方体,这需要 1496 01:14:55,010 --> 01:14:56,260 一个整数输入。 1497 01:14:56,260 --> 01:15:00,870 所以,现在,因为那是上面的主, 主要的,它会说,哦,好吧, 1498 01:15:00,870 --> 01:15:03,910 在节目后,也将是 有这样我就可以参考它,所以我会 1499 01:15:03,910 --> 01:15:05,230 就让它通过去现在。 1500 01:15:05,230 --> 01:15:07,660 >> 然后在底部, 我们实现的立方体。 1501 01:15:07,660 --> 01:15:11,180 然后主只想说, 好了,它会进行排序的链接 1502 01:15:11,180 --> 01:15:12,250 这两个符号在一起。 1503 01:15:12,250 --> 01:15:14,320 我们将讨论是什么 意味着以后。 1504 01:15:14,320 --> 01:15:17,090 所以它会知道,这是 立方体函数,它应该使用。 1505 01:15:17,090 --> 01:15:19,630 1506 01:15:19,630 --> 01:15:23,383 >> 罗伯:在[听不清]关于希望 主要在底部或 1507 01:15:23,383 --> 01:15:24,880 顶,我见过两个。 1508 01:15:24,880 --> 01:15:28,630 有些事情,就像 把主要的底部。 1509 01:15:28,630 --> 01:15:32,520 但是,一旦一个项目获得特别 大,平时主要是在 1510 01:15:32,520 --> 01:15:34,290 提交自己的所有。 1511 01:15:34,290 --> 01:15:38,170 在这一点上,如 整型立方体线会 - 1512 01:15:38,170 --> 01:15:42,460 stdio.h中里面是一堆 就这样整型行 1513 01:15:42,460 --> 01:15:44,010 立方体整型输入线。 1514 01:15:44,010 --> 01:15:50,170 >> 等等这些原型都是你 往往投入的头文件,在 1515 01:15:50,170 --> 01:15:52,140 这一点,也没有关系。 1516 01:15:52,140 --> 01:15:54,700 好吧,没关系。 1517 01:15:54,700 --> 01:15:56,070 那些总是在顶部。 1518 01:15:56,070 --> 01:15:59,490 如果主要不是一个文件自身所有, 你不必担心这会让 1519 01:15:59,490 --> 01:16:02,360 个别函数原型 在文件中。 1520 01:16:02,360 --> 01:16:05,370 >> 约瑟夫:我们会得到一个小 位后,当罗布开始谈论 1521 01:16:05,370 --> 01:16:06,380 有关编译。 1522 01:16:06,380 --> 01:16:09,480 所以还有一个区别 之间的参数和参数。 1523 01:16:09,480 --> 01:16:12,500 和参数正是 我们称这些投入时 1524 01:16:12,500 --> 01:16:13,820 我们定义函数。 1525 01:16:13,820 --> 01:16:16,950 我们把它叫做一个参数,当我们 实际上它传递到函数。 1526 01:16:16,950 --> 01:16:19,600 >> 所以在这种情况下,这是一个参数, 正如我们之前所说的。 1527 01:16:19,600 --> 01:16:24,130 而当我们真正使用它在那边, 的x立方体,那么X本身是 1528 01:16:24,130 --> 01:16:25,910 我们所说的论点 该函数的立方体。 1529 01:16:25,910 --> 01:16:28,150 >> 罗伯:所以参数的论点是 - 1530 01:16:28,150 --> 01:16:33,270 有这种区别,很 交替混淆。 1531 01:16:33,270 --> 01:16:37,090 在这一点上,对我来说,它就像一个 那些话,当我看到它在 1532 01:16:37,090 --> 01:16:41,190 野外,我不禁马上 质疑他们是否在使用它 1533 01:16:41,190 --> 01:16:44,120 正确的上下文,因为 差足够细微,仅仅 1534 01:16:44,120 --> 01:16:45,500 每个人都倾向于 - 1535 01:16:45,500 --> 01:16:48,530 我几乎总是说参数 不管我是什么意思。 1536 01:16:48,530 --> 01:16:51,230 1537 01:16:51,230 --> 01:16:54,630 >> 约瑟夫:和功能也很有用 对于我们所说的副作用。 1538 01:16:54,630 --> 01:16:59,230 因此,一个函数可以不取输入,并 它也可以不产生输出。 1539 01:16:59,230 --> 01:17:03,280 因此,在这种特殊情况下,我 定义一个子程序,有没有 1540 01:17:03,280 --> 01:17:03,970 返回值。 1541 01:17:03,970 --> 01:17:07,730 并且为了指定这一点,我们使用 我们称之为无效在这里。 1542 01:17:07,730 --> 01:17:10,890 因此该函数的副作用 是,它只是打印的东西 1543 01:17:10,890 --> 01:17:11,920 出到页面中。 1544 01:17:11,920 --> 01:17:13,840 它实际上并没有采取任何 输入,并且它不 1545 01:17:13,840 --> 01:17:15,360 实际上产生任何输出。 1546 01:17:15,360 --> 01:17:18,230 >> 但是这可能在这个意义上是有用 如果你想,例如,调试 1547 01:17:18,230 --> 01:17:21,530 东西在你的程序中,如果你想要 写一点子程序 1548 01:17:21,530 --> 01:17:25,160 打印出来,让我们说,内容 内存什么的。 1549 01:17:25,160 --> 01:17:29,800 等等这些副作用是有时 上下文之外有用 1550 01:17:29,800 --> 01:17:33,010 只是想输入和输出。 1551 01:17:33,010 --> 01:17:34,260 有问题吗? 1552 01:17:34,260 --> 01:17:37,270 1553 01:17:37,270 --> 01:17:44,240 >> 并结束这个特殊的领域, 这是什么节目呢? 1554 01:17:44,240 --> 01:17:47,420 我给你们一对夫妇 秒读通过它。 1555 01:17:47,420 --> 01:17:52,720 1556 01:17:52,720 --> 01:17:56,880 在一个非常基本的水平,我们要 说的是,它交换x和y,对不对? 1557 01:17:56,880 --> 01:18:00,090 >> 所以,你们有多少人真的认为 这将交换x和y? 1558 01:18:00,090 --> 01:18:02,160 举起你的手。 1559 01:18:02,160 --> 01:18:02,760 没有之一。 1560 01:18:02,760 --> 01:18:03,070 确定。 1561 01:18:03,070 --> 01:18:06,720 谁认为它会 不会掉x和y? 1562 01:18:06,720 --> 01:18:09,120 和该总和是 不是整个房间。 1563 01:18:09,120 --> 01:18:10,440 所以有些人不知道。 1564 01:18:10,440 --> 01:18:10,920 确定。 1565 01:18:10,920 --> 01:18:11,630 这是合理的。 1566 01:18:11,630 --> 01:18:16,450 >> 所以,让我们通过会发生什么时, 你实际上调用函数首先在 1567 01:18:16,450 --> 01:18:18,320 为了回答这个问题。 1568 01:18:18,320 --> 01:18:21,430 因此,这是什么内存 那种样子。 1569 01:18:21,430 --> 01:18:23,860 这有点像一个简化模型 的记忆是什么样子时, 1570 01:18:23,860 --> 01:18:24,800 你运行一个程序。 1571 01:18:24,800 --> 01:18:27,270 因此,有一种叫 堆栈下来这里 1572 01:18:27,270 --> 01:18:28,330 一种叫做堆。 1573 01:18:28,330 --> 01:18:30,950 而这些对成长 的存储器的中间。 1574 01:18:30,950 --> 01:18:33,860 >> 因此,在这种特殊情况下,当 你调用一个函数,它 1575 01:18:33,860 --> 01:18:35,680 被放在堆栈上。 1576 01:18:35,680 --> 01:18:38,900 然后无论是包含在 功能停留在我们所说的 1577 01:18:38,900 --> 01:18:40,550 函数的堆栈帧。 1578 01:18:40,550 --> 01:18:44,500 等拿到一个不错的可视化 对此,let's - 例如,我们有 1579 01:18:44,500 --> 01:18:45,960 程序主要更早。 1580 01:18:45,960 --> 01:18:47,820 和主里面,我们称之为立方体。 1581 01:18:47,820 --> 01:18:50,650 所以主要会先进入堆叠 框架,因为它是第一个函数 1582 01:18:50,650 --> 01:18:51,640 这就是所谓的。 1583 01:18:51,640 --> 01:18:55,740 >> 然后当立方体被称为内侧 主要的,它被放在主顶部 1584 01:18:55,740 --> 01:18:57,790 内的存储器中。 1585 01:18:57,790 --> 01:19:02,090 所以,你会发现这里是立方体 有它自己的参数和其 1586 01:19:02,090 --> 01:19:02,950 自己的本地人。 1587 01:19:02,950 --> 01:19:06,720 所以,当你真正传递的东西 一个函数,参数,它 1588 01:19:06,720 --> 01:19:09,910 得到是什么副本 从主要的传递。 1589 01:19:09,910 --> 01:19:14,140 >> 和排序来解释这一点,让我们 走过一个程序。 1590 01:19:14,140 --> 01:19:16,960 因此,我们有栈,这是 只是部分堆垛。 1591 01:19:16,960 --> 01:19:21,240 而我们要做的是,我们首先初始化 x和y为一个和两个。 1592 01:19:21,240 --> 01:19:22,400 因此,我们有这些小盒子。 1593 01:19:22,400 --> 01:19:25,310 他们坐在主的堆栈 框架堆栈上。 1594 01:19:25,310 --> 01:19:26,580 它们含有一个和两个。 1595 01:19:26,580 --> 01:19:28,820 >> 现在,我们称之为交换。 1596 01:19:28,820 --> 01:19:33,940 什么情况是我们通过x和y成 掉期,掉期和创建自己的副本 1597 01:19:33,940 --> 01:19:36,520 这些变量里面使用 它的堆栈帧。 1598 01:19:36,520 --> 01:19:39,920 所以,现在在那边,我们有一个,这 包含x具有的值,以及b, 1599 01:19:39,920 --> 01:19:41,620 其中包含使y的值是。 1600 01:19:41,620 --> 01:19:42,670 这样的一,二。 1601 01:19:42,670 --> 01:19:47,130 >> 而且你会发现,这是独立的 从x和y的主内。 1602 01:19:47,130 --> 01:19:51,390 所以我们现在创建一个临时的 变量包含。 1603 01:19:51,390 --> 01:19:56,100 我们设置一个等于b,那么它 变化从一到两个。 1604 01:19:56,100 --> 01:19:59,340 然后我们将b等于 到温度,这是其中之一。 1605 01:19:59,340 --> 01:20:01,640 >> 然后现在我们退出了 这个功能。 1606 01:20:01,640 --> 01:20:04,310 1607 01:20:04,310 --> 01:20:07,410 当您退出功能的出去, 堆栈帧被弹出堆栈。 1608 01:20:07,410 --> 01:20:08,270 我们称它推。 1609 01:20:08,270 --> 01:20:12,750 你推一个栈帧压入堆栈 而你若弹出从堆栈中。 1610 01:20:12,750 --> 01:20:16,080 所以会发生什么事是一切 是刚才那个堆栈帧排序 1611 01:20:16,080 --> 01:20:17,280 上升在火焰中。 1612 01:20:17,280 --> 01:20:19,180 所以不再存在。 1613 01:20:19,180 --> 01:20:20,470 >> 但是,我们注意到了吗? 1614 01:20:20,470 --> 01:20:23,690 我们从来没有真正改变 x和y的值,对不对? 1615 01:20:23,690 --> 01:20:26,530 所以那些地方呆主。 1616 01:20:26,530 --> 01:20:29,900 并通过传递东西掉期,我们 其实从来没有改变这些值。 1617 01:20:29,900 --> 01:20:31,260 而我们称这是什么? 1618 01:20:31,260 --> 01:20:33,040 我们按值调用这个传球。 1619 01:20:33,040 --> 01:20:36,860 >> 所以在C中,当你通过东西进入 功能,它通过它们按价值计算, 1620 01:20:36,860 --> 01:20:40,160 使他们的副本 该函数使用。 1621 01:20:40,160 --> 01:20:43,980 我们将了解一些所谓的 通过引用传递后,但是这 1622 01:20:43,980 --> 01:20:45,390 一种方法可以解决这个问题。 1623 01:20:45,390 --> 01:20:47,080 但我们不会担心 那直到后来。 1624 01:20:47,080 --> 01:20:52,200 >> 罗伯:而实际上,这个词,传递 通过引用,所以C甚至没有 1625 01:20:52,200 --> 01:20:54,270 路过的参考。 1626 01:20:54,270 --> 01:20:56,760 Ç已经完全经过值。 1627 01:20:56,760 --> 01:20:59,630 不管你做什么,你总是 路过的一些副本。 1628 01:20:59,630 --> 01:21:03,395 它只是说,像我样的提 之前的指针 1629 01:21:03,395 --> 01:21:07,690 和一个字符串确实是只有四 字节指着某处在内存中。 1630 01:21:07,690 --> 01:21:11,890 >> 好吧,如果我有这样的字符串,它的 告诉我,是其中的字符串 - 1631 01:21:11,890 --> 01:21:15,470 好吧,如果我有这个指针指向这个 放置在内存中,然后我可以通过一个 1632 01:21:15,470 --> 01:21:19,160 该指针指向一个函数的副本, 该功能仍然知道在哪里 1633 01:21:19,160 --> 01:21:19,780 内存是。 1634 01:21:19,780 --> 01:21:22,950 所以,这两个指针都指向 内存中的同一个地方,和 1635 01:21:22,950 --> 01:21:26,460 这就是我们要如何才能够 修改以后的事情 1636 01:21:26,460 --> 01:21:29,852 当前堆栈帧。 1637 01:21:29,852 --> 01:21:31,040 >> 约瑟夫:你们想干什么编译? 1638 01:21:31,040 --> 01:21:31,820 >> 罗伯:不,这是5:30。 1639 01:21:31,820 --> 01:21:32,910 >> 约瑟夫:确定。 1640 01:21:32,910 --> 01:21:35,040 它是5:30。 1641 01:21:35,040 --> 01:21:35,360 确定。 1642 01:21:35,360 --> 01:21:39,280 因此,我们将覆盖编译我猜 下一节,或者你的节 1643 01:21:39,280 --> 01:21:42,795 领导者会在这一点上。 1644 01:21:42,795 --> 01:21:43,272 和 - 1645 01:21:43,272 --> 01:21:44,630 >> 罗伯:有问题吗? 1646 01:21:44,630 --> 01:21:46,760 >> 约瑟夫:有问题吗? 1647 01:21:46,760 --> 01:21:47,150 是吗? 1648 01:21:47,150 --> 01:21:52,469 >> 喇叭5:使用从CS50,任何字符串 我们要使用的功能 1649 01:21:52,469 --> 01:21:53,880 这些,那将是像C函数。 1650 01:21:53,880 --> 01:21:59,050 CS50并没有消失在和 做任何额外的。 1651 01:21:59,050 --> 01:22:01,850 >> 罗伯:正确。 1652 01:22:01,850 --> 01:22:08,155 任何的C状[听不清],您 会使用那些在我们的字符串。 1653 01:22:08,155 --> 01:22:12,400 >> 约瑟夫:最后一件事我想 一提的是,我们有一个风格指南 1654 01:22:12,400 --> 01:22:13,130 这个类。 1655 01:22:13,130 --> 01:22:13,360 >> 罗伯:哦,是的。 1656 01:22:13,360 --> 01:22:15,270 >> 乔瑟夫:所以,如果你来自一个 前编程背景,你 1657 01:22:15,270 --> 01:22:17,750 可能有一定的约定,当 你写的代码就像把 1658 01:22:17,750 --> 01:22:20,950 在同一行或特定括号 缩进方式 1659 01:22:20,950 --> 01:22:22,240 或命名变量。 1660 01:22:22,240 --> 01:22:26,870 在这个类中,我们要遵循 具体风格指南只是因为, 1661 01:22:26,870 --> 01:22:31,100 好吧,如果你出去工作的 行业,你会在意料之中 1662 01:22:31,100 --> 01:22:34,780 遵循的风格指南 公司在这你去。 1663 01:22:34,780 --> 01:22:38,040 >> 像例如,Facebook的我觉得 已命名的特定排序 1664 01:22:38,040 --> 01:22:38,760 约定。 1665 01:22:38,760 --> 01:22:42,570 还有的骆驼之间的差异 外壳变量和像 1666 01:22:42,570 --> 01:22:44,610 他们用下划线分隔。 1667 01:22:44,610 --> 01:22:52,170 而且,我认为最重要的是,像 例如,压痕,对不对? 1668 01:22:52,170 --> 01:22:56,440 >> 我们花括号开始的地方 的条件是,它们 1669 01:22:56,440 --> 01:22:57,730 是从下一行的。 1670 01:22:57,730 --> 01:23:01,230 而我们也把花括号中 即使是只有一条线。 1671 01:23:01,230 --> 01:23:06,100 而很多时候,有很多方法可以做 它在那里你可以将这些括号 1672 01:23:06,100 --> 01:23:08,380 如果是只有一条线断 下的If语句。 1673 01:23:08,380 --> 01:23:12,070 但在这个类中,我们要遵循 具体风格指南只是让你得到 1674 01:23:12,070 --> 01:23:13,550 用之类的事情。 1675 01:23:13,550 --> 01:23:16,410 >> 罗伯:是啊,50款将要 执行本风格指南,我们很 1676 01:23:16,410 --> 01:23:18,080 要使用样式50 分级代码。 1677 01:23:18,080 --> 01:23:25,150 因此,它使事情变得更容易为我们和 希望不要把事情说 1678 01:23:25,150 --> 01:23:30,120 为你提供了很多糟糕的 标准化的风格不应该是 1679 01:23:30,120 --> 01:23:31,460 不现实的。 1680 01:23:31,460 --> 01:23:36,000 >> 约瑟夫:最后,找到风格 引导,去manual.cs50.net/style。 1681 01:23:36,000 --> 01:23:37,725 ,是的。 1682 01:23:37,725 --> 01:23:40,575 >> 扬声器4:你要强制执行 每行的所有字符? 1683 01:23:40,575 --> 01:23:42,480 >> 罗伯:是的。 1684 01:23:42,480 --> 01:23:45,405 >> 约瑟夫:对不起,伙计们。 1685 01:23:45,405 --> 01:23:47,680 >> 罗伯:这就像唯一的一个。 1686 01:23:47,680 --> 01:23:50,420 在这一点上,我与120确定。 1687 01:23:50,420 --> 01:23:52,460 我跟说120行 每行的字符。 1688 01:23:52,460 --> 01:23:53,830 据我所知,被一些限制。 1689 01:23:53,830 --> 01:23:57,130 我觉得80是如此之小,但 我们正在执行它。 1690 01:23:57,130 --> 01:24:00,260 >> 约瑟夫:我个人认为,用 C,80个字符是比较确定。 1691 01:24:00,260 --> 01:24:04,160 一旦你开始给其他 语言如JavaScript和PHP,不 1692 01:24:04,160 --> 01:24:08,860 所以合理的,只是限制 它为80个字符。 1693 01:24:08,860 --> 01:24:09,260 确定。 1694 01:24:09,260 --> 01:24:12,780 嗯,这是超级节。 1695 01:24:12,780 --> 01:24:14,750 有谁要糖果? 1696 01:24:14,750 --> 01:24:16,000 >> 扬声器4:是的。 1697 01:24:16,000 --> 01:24:18,667