*#分支与循环

本文介绍了如何使用C语言中的rand和srand函数生成真正的随机数,通过time函数获取时间戳作为种子,进而实现更有趣的猜数字游戏和恶作剧功能。同时提到了如何结合shutdown和system函数制作简单的关机游戏,但强调游戏应适度,避免危险操作。
摘要由CSDN通过智能技术生成

这篇不属于编程之旅系列,但因为某些个人原因,所以先提前写。并且这个主题会出现我很感兴趣的恶作剧环节,所以先插进一篇与正常进度不同的博客。等这篇博客写完,会恢复正常进度。

1、猜数字游戏

函数rand可以生成随机数

rand函数的使⽤需要包含⼀个头文件是:stdlib.h
如果要生成五个随机数,如下:
# 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 ;
}

但很遗憾,rand生成的随机数是伪随机数,rand函数是对⼀个叫“种子”的基准值进行运算生成的随机数,多次运算下,所谓的随机值是不变的,因为种子未变。所以,如果想生成真正的时刻变化的随机数,就需要变化的种子,这里可以用时间time。 

(程序中在调用 rand 函数之前也可以先调用 srand 函数,然后通过 srand 函数的参数来设置rand函数生成随机数的时候的种子,种子在变化,每次生成的随机数也就变化。但这又造成了矛盾,因为在生成随机数之前,我们需要先提供一个随机数,这与原想法相悖。)
而时间时刻变化,所以可以用时间作为种子。
time函数需要包含头文件time.h,并需要用到时间戳,time函数返回当前的日历时间的这个时间差叫做时间戳。
time( NULL ); // 调⽤ time 函数返回时间戳,这⾥没有接收返回值
NULL是一种指针。
// 因为 srand 的参数是 unsigned int 类型,我们将 time 函数的返回值强制类型转换
srand(( unsigned int )time( NULL ));
如下图
# include <stdio.h>
# include <stdlib.h>
# include <time.h>
int main ()
{
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 ;
}
不过这还不够好玩,可以写另一个更好玩的代码,猜数字游戏。
如下:
void game()
{
    int r = rand() % 100 + 1;
    int guess = 0;
    while (1)
    {
        printf("请猜数字:>");
        scanf("%d", &guess);
        if (guess > r)
            printf("猜大了");
        else if (guess < r)
            printf("猜小了");
        else
        {
            printf("猜对了");
            break;
        }
    }
}
int main()
{
    int a = 0;
    srand((unsigned int)time(NULL));
    do
    {
        printf("****************\n");
        printf("**** 1, play****\n");
        printf("**** 0, exit****\n");
        printf("****************\n");
        printf("请选择:>");
        scanf("%d", &a);
        switch (a)
        {
        case 1:
            //printf("猜数字游戏\n");
            game();
            break;
        case 0:
            printf("退出游戏\n");
            break;
        default:
            printf("选错重选\n");
            break;
        }
    } while (a);
    return 0;
}
最后是我喜欢的关机游戏,也就是可以用来做恶作剧的游戏。
运行程序,就提示:一分钟内关机,如果能输入:**********......(随便怎么损人都可以),就取消关机。
首先得输入一段话吓唬人
printf("请注意,你的计算机将在一分钟后关机,如果输入:我爱喜羊羊,就取消关机\n");
电脑中有一个命令叫“shutdown”(此命令我只试过window系统,其他的不清楚。)
shutdown -s叫设置关机,shutdown -s -t指设置时间关机,shutdown -s -t -60是设置60秒关机。
shutdown -a是取消关机。
两个字符串的比较不能使用==,而应该使用strcmp函数。
strcmp 如果判断两个字符串的内容相同,则返回0。且此函数需要包含头文件<string.h>。
system是系统的意思,此库函数专门用于执行系统命令,需要包含的头文件是<stdlib.h>。
如下图
其实还可以将猜数字游戏与关机游戏结合,组成更好玩的猜数字惩罚游戏。
但是请记住,游戏不要玩的太过火了,适可而止。
尤其不要设置死循环机制的关机游戏,极容易翻车。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值