为了有一个完整的"游戏"体验,我们会进行一个小游戏界面的打印: 在主函数main()中会对这里输入的choice来进入不同的阶段。
int menu() { printf("=============================\n"); printf("==========1. 开始游戏========\n"); printf("==========0. 退出游戏========\n"); printf("=============================\n"); printf(" 请输入您的选择: "); int choice = 0; scanf("%d", &choice); return choice; }程序在这里会生成一个随机数,我们利用库函数中的rand函数来实现这个功能(注意这里的随机数是伪随机数)。
伪随机数是用确定性的算法计算出来自[0,1]均匀分布的随机数序列。并不真正的随机,但具有类似于随机数的统计特征,如均匀性、独立性等。在计算伪随机数时,若使用的初值(种子)不变,那么伪随机数的数序也不变。(百度百科) 随机数的取值和使用的种子有关,为了实现真正的随机数,我们可以在程序中加一个替换种子的方法。(下文有利用时间戳做种子的方法)
Generate random number生成随机数; int rand (void);为引用方法; 在c中头文件为:
#include<stdlib.h>下图为函数调用不同随机数范围的方法: 我们可以按照他的例子来指定随机数的范围。我这里给了1-100的例子,你可以自己来指定别的范围。
void game() { int toGuess = rand() % 100 + 1;// 1. 程序自动生成一个 1-100 的随机整数. while (1) { printf("请输入要猜的数字: "); int input = 0; scanf("%d", &input); // 3. 比较用户输入的数字和系统生成的数字之间的关系, 并给用户提示. if (input < toGuess) { printf("低了!\n"); } else if (input > toGuess) { printf("高了!\n"); } else { printf("猜对了!\n"); break; } } }时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。通俗的讲, 时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。我们利用时间戳的特点可以实现随机种子的输入。 具体的方法是:
srand(time(0));头文件为:
#include<time.h>主函数如下:
int main() { srand(time(0)); //将现在的时间戳作为随机数种子 while (1) { int choice = menu();//给用户一个交互的菜单 if (choice == 1) {//用户开始游戏 game(); } else if (choice == 0) { printf("程序退出, 再见!\n"); break; } else { // 写程序一定要考虑到用户的非法输入的情况. printf("您的输入有误, 请重新输入!\n"); } } system("pause"); return 0; }如图为一个输出结果。 你可以直接复制我的代码来试一试。QAQ 记得加头文件:
#include<stdio.h> #include<stdlib.h> #include<time.h>