C语言利用goto语句设计实现一个关机程序

 更新时间:2023年01月21日 10:48:58   作者:博客小梦  
今天给大家分享一个非常有趣的知识——用goto语句编写一个关机小程序。主要用到了shutdown命令语句、goto语句、strcmp函数等知识点,感兴趣的可以了解一下

前言

goto语句其实在平常中我们 除了学习分支语句和循环语句时,介绍循环语句时,才会知道有goto语句这个用法,那读者可能会问:我们还有学习的必要吗?

答案是显而易见的,正如黑格尔所说的:存在即合理!既然存在,就会有存在的必要!虽然我们现在不会遇到且用到 ,当在搞Linux硬件驱动等的时候,其内核含有较多的goto语句,如果不会且不知道的话,将会导致你无法理解这个的工作原理。因此我们要知道并学会用于它。

一、什么是goto语句

C语言中提供了可以随意滥用的goto语句和标记跳转的标号。从理论上讲,goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。

二、goto语句的作用是什么

goto语句在某些场合下goto语句还是用得着的,最常见的用法是终止程序在某些深度嵌套结构的处理过程。例如,一次跳出多层循环的场景。一次跳出多层循环使用break是比较麻烦的,因为break每次使用只能跳出一层循环,在这里只能用多个break才能实现,goto语句的优势就体现出来了。

三、goto语句的缺点

之所以老师没有多强调它,以及各大教科书几乎都是寥寥数笔,因为它有一个致命的缺点:一旦滥用goto语句将会导致逻辑混乱,导致系统崩溃等问题!!!

四、goto语句的结构与用法

结构:

again:
      语句;
    goto again;//again可以替换成其他的,这里不要求一定是again

用法:

某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过 程。比如结束多层嵌套的使用。

for(...)
    for(...)
   {
        for(...)
       {
            if(disaster)
                goto error;
       }
   }
    …
error:
 if(disaster)
         // 处理错误情况

五、goto语句的巧用实例——关机小程序

1、goto语句版关机小程序设计源代码:

goto语句的使用效果其实和我们的循环有异曲同工之妙,goto语句的编写也可以实现循环的效果。对比两个版本的关机小程序设计,你就能深刻感受到啦!

#define _CRT_SECURE_NO_WARNINGS 1//如果是VS编译器才需要这句代码
#include<stdio.h>
#include<stdlib.h>//shutdown命令语句的头文件
#include<string.h>//strcmp的头文件
int main()
{
    char input[20] = { 0 };
    system("shutdown -s -t 60");
again:
    printf("电脑将在1分钟内关闭,如果输入:我是猪,就取消关机!\n请输入:>");
    scanf("%s", input);
    //strcmp函数用于比较两个字符串的大小
    if (0 == strcmp(input, "我是猪"))
    {
        system("shutdown -a");
    }
    else
    {
        goto again;
    }
    return 0;
}

2、循环语句版关机小程序设计源代码:

#define _CRT_SECURE_NO_WARNINGS 1//如果是VS编译器才需要这句代码
#include<stdio.h>
#include<stdlib.h>//shutdown命令语句的头文件
#include<string.h>//strcmp的头文件
int main()
{
    char input[20] = { 0 };
    system("shutdown -s -t 60");
    while (1)
    {
        printf("电脑将在1分钟内关闭,如果输入:我是猪,就取消关机!\n请输入:>");
        scanf("%s", input);
        if (0 == strcmp(input, "我是猪"))
        {
            system("shutdown -a");
            break;
        }
    }
    return 0;
}

3.方法三

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<Windows.h>
int main(void)
{
	char input[20] = {0};
	system("shutdown -s -t 60");//表示将在60秒后电脑关机
again:
	printf("请注意:你的电脑将在60秒后自动关机,如果输入:不要关机,则取消自动关机\n");
	scanf("%s", input);
	if (strcmp(input,"不要关机") == 0)
	{
		system("shutdown -a");
	}
	else
		goto again;
	return 0;
}

效果图

总结撒花

上述就是我今天分享的主要内容啦,你学会了吗?但是,不要学会了这个小程序后去恶搞别人的电脑哇(在别人的电脑编写这个程序) ,可以在自己电脑玩玩测试一下就好啦哈哈哈!

到此这篇关于C语言利用goto语句设计实现一个关机程序的文章就介绍到这了,更多相关C语言 goto实现关机程序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅谈C#互操作的内存溢出问题

    浅谈C#互操作的内存溢出问题

    以前了解过c++的栈内存溢出,没想到在c#里被我遇到了,问题看似不大,如何被恰好相邻的四个字节是返回地址,说不定危害不小啊!看来c#的互操作还是得小心为好
    2013-10-10
  • C++ Boost Variant示例超详细讲解

    C++ Boost Variant示例超详细讲解

    Boost是为C++语言标准库提供扩展的一些C++程序库的总称。Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一,是为C++语言标准库提供扩展的一些C++程序库的总称
    2022-11-11
  • C语言数据结构之学生信息管理系统课程设计

    C语言数据结构之学生信息管理系统课程设计

    这篇文章主要为大家详细介绍了C语言数据结构之学生信息管理系统课程设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • C语言的getc()函数和gets()函数的使用对比

    C语言的getc()函数和gets()函数的使用对比

    这篇文章主要介绍了C语言的getc()函数和gets()函数的使用对比,从数据流中一个是读取字符一个是读取字符串,需要的朋友可以参考下
    2015-08-08
  • C语言数学公式来实现土味表白

    C语言数学公式来实现土味表白

    大家好,本篇文章主要讲的是C语言数学公式来实现土味表白,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • MFC框架之OnIdle案例详解

    MFC框架之OnIdle案例详解

    这篇文章主要介绍了MFC框架之OnIdle案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • VC中删除类的两种操作方法

    VC中删除类的两种操作方法

    这篇文章主要介绍了VC中删除类的两种操作方法,较为详细的描述了在VC中实现删除类的具体步骤,非常具有实用价值,需要的朋友可以参考下
    2015-05-05
  • 深入分析C++中声明与定义的区别

    深入分析C++中声明与定义的区别

    C++学了这么多年你知道为什么定义类时,类的定义放在.h文件中,而类的实现放在cpp文件中。它们为什么能够关联到一起呢?你知道什么东西可以放在.h文件中,什么不能。什么东西又可以放在cpp文件中。如果你忘记了或是压根就不明白,那么读过此文你会清晰无比!!
    2014-09-09
  • C++List容器常用函数接口刨析

    C++List容器常用函数接口刨析

    最近我学习了C++中的STL库中的list容器,对于常用容器,我们不仅要会使用其常用的函数接口,我们还有明白这些接口在其底层是如何实现的。所以特意整理出来一篇博客供我们学习
    2022-08-08
  • C++实现十进制数转为其它进制数

    C++实现十进制数转为其它进制数

    这篇文章主要为大家详细介绍了C++实现十进制数转为其它进制数,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04

最新评论