C语言利用goto语句实现一键关机小程序

Elena
Elena
发布时间:2026-10-15| 4人浏览过
原创

在C语言基础语法中,goto 语句通常因破坏代码结构而较少被提倡,但在理解底层逻辑或特定场景下仍有其价值。本文将演示如何利用 goto 语句结合Windows系统命令,编写一个简单的电脑自动关机及取消程序。该程序通过 system() 触发关机指令,并利用字符串比较确认用户意图,最终实现交互式控制。

目标与原理

本项目的核心目标是创建一个控制台程序,具备以下功能:

  • 启动时设定60秒后自动关机。
  • 在此期间,允许用户输入特定口令(如“我是猪”)来终止关机进程。
  • 若输入错误,则提示重新输入,利用 goto 实现等待输入的逻辑循环。

实现依赖两个关键标准库函数:
- system("shutdown -s -t 60"):调用Windows Shell执行关机命令,-t 60 表示延迟60秒。
- system("shutdown -a"):执行取消已计划的关机任务。

准备条件

  1. 编译器环境:Visual Studio (VS) 或其他支持 C89/C99 标准的 C 语言编译器。
  2. 操作系统:Microsoft Windows(因使用了 Windows 特定的 shutdown 命令)。
  3. 头文件准备:需引入 <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实现关机程序资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。