C语言利用goto语句实现一键关机小程序
在C语言基础语法中,goto 语句通常因破坏代码结构而较少被提倡,但在理解底层逻辑或特定场景下仍有其价值。本文将演示如何利用 goto 语句结合Windows系统命令,编写一个简单的电脑自动关机及取消程序。该程序通过 system() 触发关机指令,并利用字符串比较确认用户意图,最终实现交互式控制。
目标与原理
本项目的核心目标是创建一个控制台程序,具备以下功能:
- 启动时设定60秒后自动关机。
- 在此期间,允许用户输入特定口令(如“我是猪”)来终止关机进程。
- 若输入错误,则提示重新输入,利用
goto实现等待输入的逻辑循环。
实现依赖两个关键标准库函数:
- system("shutdown -s -t 60"):调用Windows Shell执行关机命令,-t 60 表示延迟60秒。
- system("shutdown -a"):执行取消已计划的关机任务。
准备条件
- 编译器环境:Visual Studio (VS) 或其他支持 C89/C99 标准的 C 语言编译器。
- 操作系统:Microsoft Windows(因使用了 Windows 特定的 shutdown 命令)。
- 头文件准备:需引入
<stdio.h>、<stdlib.h>和<string.h>。
第1步:初始化环境与设置关机
首先定义宏以兼容 VS 编译器的安全检查,并声明必要的变量。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h> // system函数需要
#include <string.h> // strcmp函数需要
int main()
{
char input[20] = { 0 }; // 用于存储用户输入
// 立即执行关机倒计时命令
system("shutdown -s -t 60");
return 0;
}
此处 system 函数会向操作系统发送指令。此时任务管理器中可能看不到明显的界面变化,但系统已进入倒计时状态。
第2步:构建交互逻辑与goto跳转
接下来是实现 goto 的核心部分。我们需要设置一个标签(Label),并在判断失败时跳回该位置,形成伪循环。
again: // 定义跳转标签 again
printf("电脑将在1分钟内关闭,如果输入:我是猪,就取消关机!\n请输入:>");
scanf("%s", input);
// 使用 strcmp 比较用户输入与目标字符串
// strcmp 返回0时表示两字符串相等
if (0 == strcmp(input, "我是猪"))
{
system("shutdown -a"); // 匹配成功,取消关机
printf("关机已取消。\n");
}
else
{
// 匹配失败,跳转到 again 标签处重新提示
goto again;
}
return 0;
}

图1:程序运行效果示意图,显示倒计时警告及输入提示。
第3步:完整源码整合
将上述步骤合并,完整的 goto 版关机程序代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char input[20] = { 0 };
// 1. 发起关机指令
system("shutdown -s -t 60");
// 2. 进入判断逻辑
again:
printf("电脑将在1分钟内关闭,如果输入:我是猪,就取消关机!\n请输入:>");
scanf("%s", input);
// 3. 验证输入并分支处理
if (0 == strcmp(input, "我是猪"))
{
system("shutdown -a");
}
else
{
// 4. 未正确输入,利用 goto 回到标签处
goto again;
}
return 0;
}
补充:与while循环的对比
虽然 goto 能实现此功能,但现代 C 语言编程更倾向于使用结构化控制流。同样的逻辑可以用 while(1) 无限循环配合 break 来实现:
// while版本示例
while (1)
{
printf("请输入口令取消关机:>");
scanf("%s", input);
if (0 == strcmp(input, "我是猪"))
{
system("shutdown -a");
break; // 跳出循环
}
}
两者在效果上无异,goto 方式在某些复杂的嵌套跳出场景中可能更简洁,但在简单线性逻辑中,while 更具可读性。
风险提示与排错
- 权限问题:在部分受限的企业电脑上,可能需要管理员权限才能执行 shutdown 命令。如遇拒绝访问,请以管理员身份运行编译器生成的可执行文件。
- 输入缓冲区:
scanf("%s")遇到空格会停止读取。如果口令包含空格(如 “是 我 猪”),程序将无法匹配。本例使用单字短语避免此问题。 - 恶意软件误报:由于调用了系统关机命令,杀毒软件可能会拦截。这是正常行为,属于系统级操作。
总结
通过以上步骤,我们利用 C 语言的 goto 语句成功实现了一个具备自动关机与口令取消功能的控制台程序。这不仅展示了 goto 在流程控制中的实际用法,也复习了 system 系统调用与 strcmp 字符串比较的知识。
以上就是C语言利用goto语句设计实现一个关机程序的详细内容,更多关于C语言 goto实现关机程序资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













