goto语句
C语言提供了一种非常特殊的语法,就是goto语句和跳转标号,goto语句可以实现在一个函数内跳转到设置好的标号处。
转向语句:break语句、continue语句、goto语句、return语句。
goto语句如果使用不当,就会导致在函数内随意乱跳转,打乱程序的执行流程,所以不仅建议使用,但是在多层代码中,如果想快速跳出,使用goto较方便。不使用goto语句也可使用多次break。
关机程序:
1、程序运行起来,你的电脑将在1分钟内关机。
2、输入:我是猪,就取消关机。
system是一个库函数,需要包含头文件#include<stdlib.h>
shutdown -s中 -s表示关机-t 60表示倒计时60s,-a表示取消关机。
strcmp用于表示字符串大小如上图,也是一个库函数,需要包含头文件#include<string.h>。
也可以不用goto语句。
接下来可以运用前面的知识写一些有趣的代码。
写一个猜数字游戏
游戏要求:
1、电脑自动生成1~100之间的随机数
2、玩家猜数字,该过程中,根据猜测结果给出大了或小了的反馈,直到猜对,游戏结束。
rand函数
C语言提供了一个函数叫rand,这个函数可以生成随机数,原型如下
1 int rand(void);
void是指函数不需要参数。
rand函数会返回一个伪随机数,这个随机数的范围实在0~RAND_MAX之间,这个RAND_MAX大小是依赖编译器上实现的,但大部分编译器上是32767。
rand函数使用必须包含头文件stdlib.h。
伪随机数是指随机数是靠某种算法实现的,并不是不可预测的,rand函数是对一个叫“种子”的基准值进行运算生成的随机数。下面给一个例子。
看起来是生成了随机数(默认种子1),但当我们再次运行,发现还是这五个数,说明生成了伪随机数。在猜数字游戏中显然不可行。
srand函数
C语言又提供了一个函数叫srand,用来初始化随机数的生成器,srand的原型如下:
1 void srand(unsigned int seed);
程序中在调用rand函数前先调用srand函数,通过srand函数的参数seed来设置生成随机数的时候的种子,只要种子在变化,每次生成的随机数序列也就变化起来了。但那也就是说给srand的种子如果是随机的,rand就能生成随机数;在生成随机数的时候又需要一个随机数,这就矛盾了。
如上图,种子改变了,生成随机数不同。
time
在程序中 我们一般使用程序运行的时间作为种子,因为时间时刻在发生变化。
在C语言中有一个函数叫time,原型如下:
1 time_t time(time_t* timer)
time函数会返回当前的日历时间,其实返回值是1970年1月1日0时0分0秒到现在程序运行时间之间的差值,单位s,返回的类型是time_t类型,time_t类型本质上其实就是32位或64位的整型类型。
timer其实是一个指针,在此先不讲。
如果timer时NULL,就只返回这个时间的差值,time函数返回的时间差也被叫做:时间戳。
time函数需要包含头文件:time.h。
time_t本质上时long long类型,在srand函数内使用时要强制类型转换成unsigned int类型。
此时生成的随机数运行结果便不一样了。
在一次程序运行起来,不管生成多少个随机数,只要设置一次随机数生成种子就行。
设置随机数生成范围:
如果我们要生成0~99之间的随机数,方法如下:
1 rand()%100;//余数的范围是0~99
如果要生成1~100之间的随机数,方法如下:
1 1 + rand()%100;
如果要生成100~200之间的随机数,方法如下:
1 100 + rand()%(200 - 100 +1);//余数的范围是0~100,加100变成100~200
如果要生成a~b之间的随机数,方法如下:
1 a + rand()%(b - a + 1);
接下来就可以实现猜数字游戏的代码了。
在这里我们为了防止代码的冗长,可通过调用函数使得函数主题清晰,如,我们可以使用menu函数来制作一个菜单
void表示该函数不返回任何值。
主体函数如下。
判断过程我们可以再使用一个game函数进行判断。srand函数不应写在game函数中,玩游戏过快时,可能会生成一样的随机数。
当然,我们也可以加以次数限制,比如说只给5次机会,用完就判定为游戏失败。
此时可引入计数器count,count等于0时跳出循环,只要在循环最后加一步count--即可。
标签:语句,rand,函数,生成,循环,随机数,time,100,分支 From: https://blog.csdn.net/xie0510_/article/details/144296008