我在小学时自学了编程。我的第一个程序是在 Apple II 上编写的,但最终,我通过读书和实践学习了 C 语言。而练习编程的最佳方式是编写示例程序,以帮助运用你的新知识。
我喜欢用新语言编写的一个程序是一个简单的“猜数字”游戏。计算机从 1 到 100 中随机选择一个数字,你必须通过猜测来找出它。在另一篇文章中,我展示了如何用 Bash 编写这个“猜数字”游戏,我的 Opensource.com 同事也撰写了关于如何用 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
循环,以便用户可以猜数字。
在循环的每次迭代中,程序都会测试用户的猜测。如果用户的猜测小于随机数,程序会打印“太小”,如果猜测大于随机数,程序会打印“太大了”。循环继续,直到用户的猜测与随机数相同。
当循环退出时,程序会打印“猜对了!”然后立即结束。
$ 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!
试用一下
这款“猜数字”游戏是学习新编程语言时的绝佳入门程序,因为它以一种非常直接的方式练习了几个常见的编程概念。通过用不同的编程语言实现这个简单的游戏,你可以演示一些核心概念并比较每种语言的细节。
你是否有最喜欢的编程语言?你将如何用它编写“猜数字”游戏?关注本系列文章,了解你可能感兴趣的其他编程语言的示例。
评论已关闭。