在掌握了分支与循环相关知识之后,我们就可以写一些有趣的代码了,比如猜数字游戏
1 · 生成随机数
1 · 1 rand
int rand (void);#include <stdio.h> #include <stdlib.h> int main() { printf("%d\n", rand()); printf("%d\n", rand()); printf("%d\n", rand()); printf("%d\n", rand()); printf("%d\n", rand()); return 0; }运行一下试试:
我们再运行一次,就会发现还是这 5 个数字。
1 · 2 srand
void srand (unsigned int seed);1 · 3 time
在C语⾔中有⼀个函数叫time,就可以获得这个时间,time函数原型如下:
time_t time (time_t* timer);time函数的时候需要包含头⽂件:time.h 。
time(NULL);//调⽤time函数返回时间戳,这⾥没有接收返回值#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { //使用time函数的返回值设置种子 //因为srand的参数是unsigned int类型,我们将time函数的返回值强制类型转换 srand((unsigned int)time(NULL)); printf("%d\n", rand()); printf("%d\n", rand()); printf("%d\n", rand()); printf("%d\n", rand()); printf("%d\n", rand()); return 0; }1 · 4 生成随机数的范围
由于我们想要做的游戏是在 1 ~ 100 猜数字,但 rand 生成的随机数的范围是在0~RAND_MAX。
如何缩小这个范围呢,可以用 %
如果我们要⽣成0~99之间的随机数,⽅法如下
rand() % 100;//余数的范围是0~99所以我们要生成1~100之间的随机数就可以这么写:
rand()%100+1;//%100的余数是0~99,0~99的数字+1,范围是1~100以此类推,如果要⽣成a~b的随机数,⽅法如下:
a + rand()%(b-a+1)2 · 猜数字游戏的实现
#include <stdio.h> #include <stdlib.h> #include <time.h> void Menu() { printf("***** 1 到 100猜数字 *****\n"); printf("**************************\n"); printf("***** 1 : play *****\n"); printf("******0 : exit *****\n"); printf("**************************\n"); } void Game() { //生成 1 到 100 间的随机数 int i = 0; int ret = 0; ret = (rand() % 100) + 1; //猜数字 while (1) { printf("请输入要猜的数字:>"); scanf("%d", &i); if (i > ret) { printf("猜大了\n"); } else if (i < ret) { printf("猜小了\n"); } else { printf("恭喜 猜中了 数字是%d\n", ret); break; } } } int main() { int input = 0; srand((unsigned int)time(NULL)); do { Menu(); printf("请选择:>"); scanf("%d", &input); switch (input) { case 1: Game(); break; case 0: printf("成功退出游戏\n"); break; default: printf("无效选择,请重选\n"); break; } } while (input); return 0; }当然也可以增加难度,限制猜的次数限制。
void HardGame() { //生成 1 到 100 的随机数 int i = 0; int chance = 5; int ret = 0; ret = (rand() % 100) + 1; //猜数字 while (chance) { printf("\n还有%d次机会\n", chance); printf("请输入要猜的数字:>"); scanf("%d", &i); if (i > ret) { printf("猜大了\n"); } else if (i < ret) { printf("猜小了\n"); } else { printf("恭喜 猜中了 数字是%d\n", ret); break; } chance--; } if (chance == 0) { printf("次数用尽 挑战失败,正确答案是%d\n", ret); } }以上内容如有错误或不准确之处,欢迎指出,或者你有更好的想法,也欢迎交流。