该审查代码了
让我们把代码拼在一起,回顾一下到目前为止你做了哪些事:
必须以这个顺序排列代码:在顶部包含头文件,这样编译器就能在编译代码前把所有函数都准备好。然后在开始写函数之前定义
tracks ,这叫把 tracks 数组放在全局域。全局变量位于任何函数之外,所有函数都可以调用它们。
最后,你有两个函数,find_track() 在前,main() 在后。find_track() 必须赶在你在 main() 中调用它之前出现。
试驾
下面打开终端,看看代码能否工作。
好消息,程序工作了!
到目前为止,这个程序是你写过最长的一个,但它做了很多的事情。程序创建了一个字符串数组,并利用标准库中的字符串处理函数搜索数组中的歌名,最后找到了用户想要找的歌曲。
百宝箱
如果想了解更多关于 string.h 函数的信息,请参阅: 。 http://tinyurl.com/82acwue 如果你用的是 Mac 或 Linux 的计算机,可以在命令行中查看 string.h 中每个函数的详细介绍,假如想查看 strstr() 函数,可以输入:man strstr
这里没有蠢问题问:为什么要把数组定义成 tracks[][80] 而不是 tracks[5][80] ?答:也可以这样定义,但编译器知道列表有 5 项,所以你可以省略 5,写成[]。问:既然如此,为什么不直接写 tracks[][] ?答:每首歌的名字不一样长,为了放下最长的歌名,需要让编译器分配足够大的空间。问:也就是说 tracks 数组中每个字符串都有 80 个字符?答:程序会为每个字符串分配 80 个字符,即使歌名很短。问:所以 tracks 数组一共占了 80×5=400 字符?答:没错。问:如果我忘了包含 string.h 这样的头文件会怎么样?答:对于某些头文件来说,编译器会给出一个警告,但最后还是会包含它们;但对另一些来讲,编译器会直接提示编译错误。问:为什么我们要把 tracks 数组定义在函数外面?答:我们把 tracks 放在全局域,全局变量可以在所有函数中使用。问:既然我们创建了两个函数,计算机会先运行哪一个?答:程序总是首先运行 main() 函数。问:为什么我一定要把 find_track() 放在 main() 之前?答:在调用函数前,编译器需要知道两件事,函数接收什么参数以及函数的返回类型是什么。问:如果我把 main() 放到前面会怎么样?答:你会得到几个警告。
要点
可以用
char strings[...][...] 来创建数组的数组。
第一组方括号用来访问外层数组。
第二组方括号用来访问每个内层数组中的元素。
有了 string.h 头文件,就可以使用 C 标准库中的字符串处理函数。
可以在一个 C 程序中创建多个函数,但计算机总是先运行 main() 。
代码冰箱贴
这群人正在为一款小游戏编写新的代码,他们创建了一个函数,可以倒过来显示字符串。但悲剧发生了,一部分冰箱贴乱了,你能帮助他们重组代码吗?
代码冰箱贴解答
一群人正在为一款小游戏编写新的代码。他们创建了一个函数,可以倒过来显示字符串。但悲剧发生了,一部分冰箱贴乱了,还好有你帮助他们重组代码。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论