C语言如何写关机程序

一、关机程序

大家平时用电脑的时候都是怎么关机的呢,是不是都是如下图这样关机的呢?
在这里插入图片描述
那我们用C语言怎么实现电脑的关机呢,难道是利用代码控制鼠标的移动和点击进行关机吗?
那当然不是了,这样的话就太繁琐了。

大家在平时用电脑的时候不知道有没有注意到有一个东西叫cmd,在开始菜单输入cmd,这里会出现一个命令提示符。
在这里插入图片描述

在这个命令提示符里面就可以输入一些命令的。比如说我们输入下面一串命令。
在这里插入图片描述
这里才开始是没有shutdown -s -t 60以及shutdown -a这些命令的,都是小编加进去的。下面我来解读一下这些命令。

  1. shutdown 是用来关机的命令
  2. -s是设置关机
  3. -t是设置倒计时关机
  4. 60是倒计时60秒关机
    注意这些数据的输入之间都是要加入图中的空格的,当你输入完这些数据后按下空格,就会弹出如下图提示,我这里以win11系统作演示,其他版本的windows可能有所区别:
    在这里插入图片描述
    弹出之后,你点击关闭按钮,再输入shutdown -a就可以取消关机了,不然小编就要重启电脑重写了哈哈。
    在这里插入图片描述
    那么这里问题就来了,我们如何使用C语言来实现这样的命令呢?

这里我们就需要使用一个函数system,这个函数是用来执行命令的,我们这里把shutdown -s -t 60传进去,system就真的会执行这个命令。

system("shutdown -s -t 60");

而使用system需要包含一个头文件,这个头文件是

#include <stdlib.h>

这里我们再加一句友好的提示,不然别人不知道我们在干什么,比如:

printf("请注意,你的电脑在1分钟内关机,如果输入:我是猪,就取消关机\n");

这里我们还需要给别人一个输入信息的机会是吧,那就scanf

scanf("%s", input);//因为我是猪是字符串,所以用%s,input不需要取地址,因为数组名本来就是地址

那输入一个字符串放哪里呢,是不是需要放到一个字符数组里面,这里就就给一个字符数组,比如说:

char input[20] = {0};//字符数组,用来存放字符串

那万一这里别人输入的不是我是猪,而是你是猪,你全家都是猪,那怎么办呢?这就需要一个判断的代码了,那有的人就这么写了:

if(input=="我是猪")
{
}

这里有些人的思路就是,intput里面放的是一个字符串,我是猪是字符串,就可以比较了,其实是不能这么写的,两个字符串在比较内容的时候,是不能使用等号的。
这里就使用了一种新的知识,就是

if (strcmp(input, "我是猪") == 0)
{
}

这里strcmp是string compare的缩写,需要引用头文件#include <string.h>,如果两个字符串相等,strcmp函数会返回0,那如果那个人很乖的话,我们这里就可以取消关机了哈哈,同理:

system("shutdown -a");//取消关机

但是如果那个人宁死不从,就不服输呢?咱们就可以else语句了,也有的兄弟比较仁慈,再给他60秒,60秒内输完我是猪,就不关机了,那这个时候怎么做呢,有的兄弟就想到了用goto,接下来展示完整代码以及运行的图片:

#define _CRT_SECURE_NO_WARNINGS
//写一个关机程序
//功能:
//程序运行起来后,电脑就倒计时1分钟关机
//如果在1分钟内输入:我是猪,就取消关机
//不输入的话,1分钟后就关机
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//system是一个函数,这个函数是用来执行命令的
int main()
{
	char input[20] = {0};//字符数组,用来存放字符串
	system("shutdown -s -t 60");
again:
	printf("请注意,你的电脑在1分钟内关机,如果输入:我是猪,就取消关机\n");
	scanf("%s", input);//input不需要取地址,因为数组名本来就是地址
	//判断
	//strcmp - string compare
	//如果两个字符串相等,strcmp函数会返回0
	if (strcmp(input, "我是猪") == 0) //两个字符串在比较内容的时候,不能使用==
	{
		system("shutdown -a");//取消关机
		printf("关机被取消\n");
	}
	else
	{
		goto again;
	}
	return 0;
}

在这里插入图片描述

这里goto就不断往前面跳,不断给机会,如果60s都不输入正确答案,就会关机。

有人就要说了,这个goto语句我不熟悉呀,能不能用别的方法呢?当然是可以的,这里的goto本质上是循环的作用嘛,我们可以使用while达到相同的作用,只要在输入我是猪的时候用break跳出循环就可以了。
在这里插入图片描述
想了想还是写一下,不过接下来的东西建议在自己电脑上试一试哈,不要用别人的电脑试,有点不道德哈哈。
其实呢我们电脑上有一个东西叫服务,可以在开始菜单里找到。
在这里插入图片描述
这里点开之后,任意一个服务,都可以右击鼠标点开看他的属性

在这里插入图片描述
可以看到任意一个服务都是一个.exe一个程序。
而我们刚刚写的程序,也是一个.exe的一个程序
在这里插入图片描述
而我们写出来的这个程序也是可以加到服务里去的。
在这里插入图片描述
大家也可以看到这个服务的启动类型既有自动也有手动。
而这个自动呢,就是你每次开电脑后,都会运行这个程序,哈哈那大家也知道会怎么样了,你的好兄弟要是每次开机后,都要输入一次我是猪,那是不是就嗯,但是呢!本作者言辞声明!!!这是非常不道德的对吧,而且万一把人家电脑搞坏了怎么办!!所以不要干,也不要说是我教的!!我为人正直,这下头事干不了一点。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值