目录
前言
作为萌新,既想运用自己新学的c语言整蛊朋友,又担心自己的知识储备不够。接下来介绍的关机程序就是你的最好选择(只能在电脑上使用,手机无效)
1.代码展示
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char input[20] = { 0 };
system("shutdown -s -t 60");
again:
printf("你电脑将会在1分钟内关机,如果输入:我系250,就取消关机\n");
system("shutdown -s -t 60");
scanf("%s", input);
if (strcmp(input,"我系250") == 0)
{
system("shutdown -a");
printf("请输入文本\n");
}
else
{
goto again;
}
return 0;
}
结果展示
二、代码详解
1. 头文件引入与宏定义
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define _CRT_SECURE_NO_WARNINGS:这是一个预处理指令,用于禁用Visual Studio编译器中的安全警告。在VS中,像scanf这样的函数会被认为是不安全的,加上这个宏可以避免编译时的警告信息。#include<stdio.h>:引入标准输入输出库,提供了printf、scanf等函数。#include<stdlib.h>:引入标准库,提供了system函数用于执行系统命令。#include<string.h>:引入字符串处理库,提供了strcmp函数用于字符串比较。
2. 主函数与变量声明
int main()
{
char input[20] = { 0 };
int main():C语言程序的入口函数,程序从这里开始执行。char input[20] = { 0 };:声明一个字符数组input,大小为20个字符,并用0初始化所有元素。这个数组用于存储用户输入的字符串。
3. 系统关机命令
system("shutdown -s -t 60");
system():执行系统命令的函数。"shutdown -s -t 60":Windows系统的关机命令参数:shutdown:关机命令-s:关闭计算机-t 60:设置60秒后关机
4. 标签与循环控制
again:
printf("你电脑将会在1分钟内关机,如果输入:我系250,就取消关机\n");
system("shutdown -s -t 60");
again::这是一个标签(label),配合goto语句实现循环跳转。printf():向控制台输出提示信息,告诉用户程序的功能。- 再次执行
system("shutdown -s -t 60"):确保即使用户输入错误后重新循环,关机计时器也会重新设置为60秒。
5. 用户输入与字符串比较
scanf("%s", input);
if (strcmp(input,"我系250") == 0)
{
system("shutdown -a");
printf("请输入文本\n");
}
else
{
goto again;
}
scanf("%s", input):从标准输入读取字符串,存储到input数组中。%s是字符串格式说明符。strcmp(input,"我系250"):比较input字符串和"我系250"字符串:- 返回0表示两个字符串完全相同
- 返回负数表示
input小于"我系250" - 返回正数表示
input大于"我系250"
system("shutdown -a"):取消关机命令。-a参数表示中止系统关闭。goto again;:如果用户输入错误,跳转到again:标签处,重新开始循环。
6. 程序结束
return 0;
}
return 0;:主函数返回0,表示程序正常结束。在C语言中,main函数返回0通常表示成功执行。
程序逻辑流程图
flowchart TD
A[程序开始] --> B[设置60秒后关机]
B --> C[显示提示信息]
C --> D[等待用户输入]
D --> E{输入是否正确?}
E -->|是| F[取消关机]
F --> G[显示提示信息]
G --> H[程序结束]
E -->|否| I[跳转到标签处]
I --> C
注意事项
- 安全性:这个程序会实际执行系统关机命令,请在测试时谨慎使用。
- 平台依赖:
shutdown命令是Windows特有的,在Linux或macOS上无法运行。 - 字符串比较:
strcmp函数区分大小写,且比较的是整个字符串。 - 缓冲区大小:
input数组大小为20,如果用户输入超过19个字符(留一个给字符串结束符'\0'),会导致缓冲区溢出。 - goto语句:虽然这里使用
goto实现了循环,但通常推荐使用while或do-while循环,代码更清晰易读。
实战演练
记得保存后在文件夹中将后缀改为.exe以做伪装
非常好用 希望大家能够学会