通过编写一个简单的游戏学习 C 语言
当你学习一门新的编程语言时,这个“猜数字”游戏是一个很好的入门程序。下面是如何用 C 语言来编写它。
- 作者: LCTT qfzy1233 译来源:Linux中国|2021-01-14 08:55
我在小学时就开始 自学编程 。我的第一个程序是在 Apple II 上编写的,但最终,我还是通过看书和编程练习学会了 C 语言。练习编程的最佳方法是编写示例程序,它能帮助你练习新知识。
在我学习一种新的编程语言时,我喜欢编写一个简单的“猜数字”游戏来练习。电脑从 1 到 100 中随机挑选一个数字,你必须通过猜测来算出来。在另一篇文章中,我展示了如何用 Bash 语言编写这个 “猜数字”游戏 ,我的同事也写了一些文章,介绍如何用 Java 、 Julia 和其他计算机语言编写它。
“猜数字”游戏的伟大之处在于它践行了几个编程概念:如何使用变量、如何比较值、如何打印输出以及如何读取输入。
整个夏天,我录制了 一个系列视频 ,教人们如何用 C 语言 编写程序。从那以后,我听到了很多人都在跟着它学习 C 语言编程的消息。所以,我想接着用 C 语言写一个“猜数字”的游戏。
去取一个随机数
从写一个函数来选择一个随机数字来开始“猜数字”游戏。在编写函数时,优秀的程序员会尽量使它们具有灵活性,这样他们就可以重用它们来解决略有不同的问题。因此,与其硬编码函数来选择 1 到 100 之间的一个随机数,不如编写函数来选择 1 到某个整数 maxval 之间的一个随机数:
- #include <stdio.h>
- #include <sys/random.h>
- int
- randnum(int maxval)
- {
- /* pick a random number from 1 to maxval */
- int randval;
- getrandom(&randval, sizeof(int), GRND_NONBLOCK);
- /* could be negative, so ensure it's positive */
- if (randval < 0) {
- return (-1 * randval % maxval + 1);
- }
- else {
- return (randval % maxval + 1);
- }
- }
该函数使用 Linux 的系统调用 getrandom 来生成一系列随机数。你可以在手册页中了解关于这个系统调用的更多信息,但请注意,getrandom 将用随机的 0 和 1 填充变量。这意味着最终值可以是正的,也可以是负的,因此你需要在之后进行测试,以确保 randnum 函数的结果是正值。
编写程序
你可以用这个函数来写你的“猜数字”程序:
- #include <stdio.h>
- #include <sys/random.h>
- int
- randnum(int maxval)
- {
- ...
- }
- int
- main(void)
- {
- int number;
- int guess;
- number = randnum(100);
- puts("Guess a number between 1 and 100");
- do {
- scanf("%d", &guess);
- if (guess < number) {
- puts("Too low");
- }
- else if (guess > number) {
- puts("Too high");
- }
- } while (guess != number);
- puts("That's right!");
- return 0;
- }
程序首先使用 randnum 函数从 1 到 100 之间选择一个随机数。在向用户输出一个提示后,程序进入一个 do-while 循环,以便用户可以猜测数字。
在循环的每次迭代中,程序测试用户的猜测的数值。如果用户的猜测小于随机数,程序将输出“Too low”,如果猜测大于随机数,程序将输出“Too high”。循环继续,直到用户的猜测与随机数相同。
当循环退出时,程序输出 “That's right!”,然后立即结束:
- $ gcc -o guess -Wall guess.c
- $ ./guess
- Guess a number between 1 and 100
- 50
- Too high
- 30
- Too low
- 40
- Too low
- 45
- Too high
- 42
- Too low
- 43
- Too low
- 44
- That's right!
尝试动手
在学习一门新的编程语言时,这个“猜数字”游戏是一个很好的入门程序,因为它以一种非常直接的方式练习了几个常见的编程概念。通过用不同的编程语言实现这个简单的游戏,你可以演示一些核心概念,并比较每种语言的细节。
点赞 0
- 大家都在看
- 猜你喜欢
编辑推荐
- 24H热文
- 一周话题
- 本月获赞
- 自动“抢茅台”脚本,太香了!坐在马桶上看算法:快速排序太厉害了,终于有人能把TCP/IP协议讲的明明白白了!花了一个星期,我终于把RPC框架整明白了!终于有人把Elasticsearch原理讲透了!图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)五大自动化测试的Python框架6种微服务RPC框架,你知道几个?
- 坐在马桶上看算法:快速排序太厉害了,终于有人能把TCP/IP协议讲的明明白白了!花了一个星期,我终于把RPC框架整明白了!图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)终于有人把Elasticsearch原理讲透了!为什么我不要求996,公司还能做到市值1万多亿?五大自动化测试的Python框架自动“抢茅台”脚本,太香了!
- 坐在马桶上看算法:快速排序太厉害了,终于有人能把TCP/IP协议讲的明明白白了!花了一个星期,我终于把RPC框架整明白了!图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)终于有人把Elasticsearch原理讲透了!五大自动化测试的Python框架6种微服务RPC框架,你知道几个?中台不行了?阿里彻底拆中台了!
订阅专栏+更多
-
数据湖与数据仓库的分析实践攻略
助力现代化数据管理:数据湖与数据仓库的分析实践攻略共3章 | 创世达人3人订阅学习
-
云原生架构实践
新技术引领移动互联网进入急速赛道共3章 | KaliArch30人订阅学习
-
数据中心和VPDN网络建设案例
漫画+案例共20章 | 捷哥CCIE209人订阅学习
视频课程+更多
-
鸿蒙手机应用开发入门(Java)
讲师:钟洪发1490人学习过
-
2020年实践哥Beat+ELK7.6+Grafana运维日志分
讲师:实践哥3743人学习过
-
Netty教程:十二个实例带你轻松学习Netty
讲师:江成军86040人学习过
专题推荐+更多
- 精选博文
- 论坛热帖
-
订阅51CTO邮刊
点击这里查看样刊

51CTO服务号

51CTO官微