当前位置:   article > 正文

C — 实现windows系统的自动关机_自动关机代码

自动关机代码

C语言 — 实现windows系统的自动关机

                                              --VS2019工作环境(C 小白的第一个博客0.0)
  • 1

1. 准备工作 (需要引入头文件)

 // **程序实现需要引入的头文件**
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <time.h>
  • 1
  • 2
  • 3
  • 4
  • 5

2.main主程序

int main()
{
	system("shutdown -s -t 60"); // 系统将在60s后关机
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5

可以看到上述的主程序中只使用到了system(“shutdown -s -t 60”) 语句,此语句是让windows系统在60s后实现自动关机。
(其根本上是在windows系统添加了一个定时关机脚本)

3.程序优化

大家看了上面的代码,发现运行了电脑60s后就关机了,这不行呐!我们要给上面程序加上可以终止关机命令才行呐,所以我们可以加上一个简单的判断。

int main()
{
    char input[20] = { 0 }; 
    
    while (1)
    {
        printf("你不想要关机就输入:“取消");
        scanf("%s",&input);   // 使用input变量接受输入值

        if (strcmp(input, "取消") == 0)  // 使用strcmp函数判断两个字符串是否相等
            // “str1 == str2”返回0 ;“str1 > str2”返回小于0的值 ;“str1 < str2”返回大于0的值。
            {
                printf("输对了,关机命令取消");
                system("shutdown -a");
                break;
            }
        else 
            {
                printf("请你好好考虑");
            }
    }    
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

可以查看strcmp函数的官方文档,可以看见strcmp函数是在<string.h>头文件中,且字符串比较后的返回值也告诉了我们,在这里我们只需要知道两个字符串相等strcmp返回是0就行了。
p9BDKSA.png
p9BDYFg.png

4.引入时间,对用户提示

经过了前面的代码我们已经能够实现一个简单的程序并通过判断用户的输入是否正确,来对程序的继续运行或终止来做出反馈。
本节将通过引入 <time.h> 头文件 给与用户时间提示,直接上代码

#define _CRT_SECURE_NO_WARNINGS 1  // 能让scanf函数在vs编译器中正常运行

// 引入必要的头文件
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

// gain_time() 函数获取当前时间的秒数
int gain_time()
{
	// 创建三个变量 存储当前时间的 -> 时、分、秒
	int ps = 0;  // s
	int pm = 0;  // min
	int ph = 0;  // h
	int sums = 0;
	time_t timep;
	time(&timep);
	struct tm* p;
	p = gmtime(&timep);
	ps = p->tm_sec; // 当前时间 秒
	pm = p->tm_min; // 当前时间 分
	ph = p->tm_hour; // 当前时间 时
	sums = ps + pm * 60 + ph * 3600;
	return sums; // 获取当前时间的总秒数
}

int main()
{
	char input[20] = { 0 };
	int be_left_time = 0;  // 设置剩余时间
	int start_time = 0;
	int end_time = 0;
	system("shutdown -s -t 60");  // system 是一个库函数,用来执行系统命令
	start_time = gain_time();
	while (1)
	{
		printf("将在60s后关机,输入:“取消”后,取消关机:");
		scanf("%s", &input);
		if (strcmp(input, "取消") == 0)
		{
			system("shutdown -a");
			printf("very good!");
			break;
		}
		else
		{
			end_time = gain_time();
			be_left_time = 60 - (end_time - start_time);
			printf("你还剩 %d s考虑\n", be_left_time);
		}
	}
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54

代码运行效果
运行后电脑会出现下面弹窗,说明定时关机程序已经开始了
p9BsJ2j.png
下面是在控制台中输入的效果,能够看到系统在提醒我们还有多少秒
p9Bsaq0.png
输入“取消”后,电脑也会出现下面的图标,表示关机命令已经终止了
p9BsBIU.png

5.猜数字 + 关机命令 – >最终版!!!

既然大家都看到这儿了,小编再拿刚学到的猜数字小游戏融入到此程序中,代码如下

#define _CRT_SECURE_NO_WARNINGS 1    // 能让scanf函数在vs编译器中正常运行

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

int gain_time()
{
	// 创建三个变量 存储当前时间的 -> 时、分、秒
	int ps = 0;  // s
	int pm = 0;  // min
	int ph = 0;  // h
	int sums = 0;
	time_t timep;
	time(&timep);
	struct tm* p;
	p = gmtime(&timep);
	ps = p->tm_sec; // 当前时间 秒
	pm = p->tm_min; // 当前时间 分
	ph = p->tm_hour; // 当前时间 时
	sums = ps + pm * 60 + ph * 3600;
	return sums; // 获取当前时间的总秒数
}

void meau()
{
	printf("####################\n");
	printf("#######1.play#######\n");
	printf("#######0.eixt#######\n");
	printf("####################\n");
}
// RAND_MAX ; rand 库里生成随机数的范围0-32767
int game()
{
	int be_left_time = 0;  // 设置剩余时间
	int start_time = 0;
	int end_time = 0;
	int guess = 0;
	//生成随机数
	int ret = rand() % 100 + 1;  // (1-100)的数
	// printf("%d\n", ret);
	// 猜数字

	system("shutdown -s -t 60");  // system 是一个库函数,用来执行系统命令
	start_time = gain_time();
	while (1)
	{
		printf("请输入你猜的数字:");
		scanf("%d", &guess);
		if (guess < ret)
		{
			end_time = gain_time();
			be_left_time = 60 - (end_time - start_time);
			printf("猜小了!,你还剩 %d s猜数字\n",be_left_time);
		}
		else if (guess > ret)
		{
			end_time = gain_time();
			be_left_time = 60 - (end_time - start_time);
			printf("猜大了!,你还剩 %d s猜数字\n", be_left_time);
		}
		else
		{
			printf("恭喜你,猜对了\n");
			system("shutdown -a");
			break;
		}
	}
}

int main()
{
	// time 函数传入指针
	srand((unsigned int)time(NULL)); // srand 只需要在整个程序调用一次
	int n = 0;
	while (1)
	{
		meau();
		printf("请输入猜的数字:");
		scanf("%d", &n);
		if (n == 1)
		{
			printf("选择成功,进入游戏\n");
			printf("随机数为:");
			game();
			break;
		}
		else if (n == 0)
		{
			printf("退出游戏\n");
			break;
			
		}
		else
		{
			printf("选择错误,重新选择!\n\n");
		}
	}
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101

上述代码输入1后成功进入游戏之后,就必须猜中rand函数随机产生的1-100之间的数字,关机命令才会停止,如下图
p9BcnM9.png
为了以防万一,咱们一分钟之内都猜不出来,可以在game()函数while循环语句下面新增下面的判断;来直接结束咱们的游戏

else if (guess == -1)
    {
        printf("祝你下次玩得愉快");
        system("shutdown -a");
        break;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

6.终语

很感谢大家能够看到这儿,所以小编最后再告诉大家一个好玩的,将上面的程序在vs编译器中调成如图一中的配置,再运行一遍之后,打开项目路径中的Release文件夹,里面有个一个XXX.exe可执行文件(如图二)
图一
p9Bgf6H.png(https://imgse.com/i/p9Bgf6H)
图二

最后!感谢大家,三连感谢!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/268210
推荐阅读
相关标签
  

闽ICP备14008679号