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

目录
  • 前言
  • 一、什么是goto语句
  • 二、goto语句的作用是什么
  • 三、goto语句的缺点
  • 四、goto语句的结构与用法
  • 五、goto语句的巧用实例——关机小程序
  • 总结撒花

前言

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实现关机程序内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C语言实现求解素数的N种方法总结

    目录 前言 必备小知识 C语言详解<试除法>求解素数 试除法境界1 试除法境界2 试除法境界3 试除法境界4 C语言详解<筛选法>求解素数 筛选法境界5 前言 哈喽各位友友们,我今天又学到了很多有趣的知识,现在迫不及待的想和大家分享一下!我仅已此文,手把手带领大家探讨利用试除法.筛选法求解素数的n层境界!都是精华内容,可不要错过哟!!! 必备小知识 质数又称素数.一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数:否则称为合数(规定1既不是质数也不是合数).这里

  • 通俗易懂的C语言快速排序和归并排序的时间复杂度分析

    目录 快速排序和归并排序的时间复杂度分析——通俗易懂 归并排序的时间复杂度分析 快速排序的时间复杂度 快速排序的最坏情况O(n^2) 总结 快速排序和归并排序的时间复杂度分析——通俗易懂 今天面试的时候,被问到归并排序的时间复杂度,这个大家都知道是O(nlogn),但是面试官又继续问,怎么推导出来的.这我就有点懵了,因为之前确实没有去真正理解这个时间复杂度是如何得出的,于是就随便答了一波(理解了之后,发现面试的时候答错了......). 归并排序和快速排序,是算法中,非常重要的两个知识点,同时也

  • C语言软件iic虚拟总线中间层设计详解

    目录 简介 IIC-协议 接线方式 总线 工作本质 虚拟总线(中间层)设计 使用示例 简介 mr-soft-iic 模块为 mr-library 项目下的可裁剪模块,以C语言编写,可快速移植到各种平台(主要以嵌入式mcu为主). mr-soft-iic 模块通过 io 模拟实现 iic 协议. IIC-协议 SPI 一般为一主多从设计.由2根线组成:CLK(时钟).SDA(数据). 接线方式 主机 从机 CLK CLK SDA SDA 主机从机一 一对应相接. 总线 IIC 通过地址码识别设备,

  • C语言中的字符型数据与ASCII码表

    目录 1.字符型常量 2.字符型变量 3.字符型数据的输入输出 (1)scanf()和printf()函数输入输出字符 (2)字符输入函数getchar() 总结 1.字符型常量 字符型常量指单个字符,是用一对单引号及其所括起来的字符表示. 例如:‘A’.‘a’.‘0’.’$‘等都是字符型常量. C语言的字符使用的就是ASCII字符集,总共有128个,每个相应的ASCII码都表示一个字符: (1)每一个字符都有唯一的次序值,即ASCII码. (2)数字’0’,‘1’,‘2’,…,‘9’.大写字母

  • C语言嵌入式实现支持浮点输出的printf示例详解

    目录 简介 背景 C语言可变参数函数 踩坑 功能实现 简介 mr-printf 模块为 mr-library 项目下的可裁剪模块,以C语言编写,可快速移植到各种平台(主要以嵌入式mcu为主). mr-printf 模块用以替代 libc 中 printf, 可在较小资源占用的同时支持绝大部分 printf 功能,于此同时还支持对单独功能模块的裁剪以减少用户不需要功能的资源占用. 背景 printf 大家应该使用的比较多,但是在嵌入式平台中,尤其是单片机中,libc中的printf对内存的占用较高

  • Go语言中循环语句使用的示例详解

    目录 一.概述 1. 循环控制语句 2. 无限循环 二.Go 语言 for 循环 1. 语法 2. for语句执行过程 3. 示例 4. For-each range 循环 三.循环嵌套 1. 语法 2. 示例 四.break 语句 1. 语法 2. 示例 五. continue 语句 1. 语法 2. 示例 六.goto 语句 1. 语法 2. 示例 一.概述 在不少实际问题中有许多具有规律性的重复操作,因此在程序中就需要重复执行某些语句. 循环程序的流程图: Go 语言提供了以下几种类型循环

  • C语言goto语句简单使用详解

    简单介绍 C语言中提供了可以随意滥用的 goto语句和标记跳转的标号.从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码.但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程,例如一次跳出两层或多层循环.这种情况使用break是达不到目的的.它只能从最内层循环退出到上一层的循环. 语法 C 语言中 goto 语句的语法: goto label; .. . label: statement; 示例对比 #include<std

  • Go语言流程控制之goto语句与无限循环

    goto语句 在Go编程语言中的goto语句提供无条件跳转从跳转到标记声明的功能. 注意:使用goto语句是高度劝阻的在任何编程语言,因为它使得难以跟踪程序的控制流程,使程序难以理解,难以修改.使用一个goto任何程序可以改写,以便它不需要goto. 语法 转到goto语句的语法如下: 复制代码 代码如下: goto label; .. . label: statement; 在这里,标签(label)可以是除去关键字任何纯文本,它可以在任何地方设置在Go程序的上方或下方,以使用goto语句.

  • go语言goto语句跳转到指定的标签实现方法

    goto 语句通过标签进行代码间的无条件跳转.goto 语句可以在快速跳出循环.避免重复退出上有一定的帮助.Go 语言中使用 goto 语句能简化一些代码的实现过程. 使用 goto 集中处理错误 package main import "fmt" func main() { for x := 0; x < 10; x++ { for y := 0; y < 10; y++ { if y == 2 { // 跳转到标签 goto breakHere } } } // 手动返

  • C语言中的状态机设计深入讲解

    前言 本文不是关于软件状态机的最佳设计分解实践的教程.我将重点关注状态机代码和简单的示例,这些示例具有足够的复杂性,以便于理解特性和用法. 背景 大多数程序员常用的设计技术是有限状态机(FSM).设计人员使用此编程结构将复杂的问题分解为可管理的状态和状态转换.有无数种实现状态机的方法. A switch语句提供了状态机最容易实现和最常见的版本之一.在这里,每个案例在switch语句成为一个状态,实现如下所示: switch (currentState) { case ST_IDLE: // do

  • C语言深入讲解语句与选择结构的使用

    目录 知识点1-语句 1.1 语句 1.表达式语句 2.控制语句 3.空语句 4.复合语句 知识点2-选择结构 2.1 if语句 1.if语句的单分支 2.if语句的双分支 3.if语句的多分支 4.if语句与代码块 5.悬空else 2.2switch语句 1.switch语句的定义 2.switch语句的实战案例 知识点1-语句 1.1 语句 1.表达式语句 由一个表达式加分号构成一个表达式语句,其一般形式如下: 表达式 ; Q1:什么是表达式? A1:表达式就是C语言中由运算符和数据构成的

  • 如何在Python中实现goto语句的方法

    Python 默认是没有 goto 语句的,但是有一个第三方库支持在 Python 里面实现类似于 goto 的功能:https://github.com/snoack/python-goto..比如在下面这个例子里, from goto import with_goto @with_goto def func(): for i in range(2): for j in range(2): goto .end label .end return (i, j, k) func() 在执行第一遍循

  • 对Python3 goto 语句的使用方法详解

    熟悉 C 语言的小伙伴一定对 goto 语句不陌生,它可以在代码之间随意的跳来跳去,但是好多老鸟都告诫大家,不要使用 goto,因为 goto 会使你的代码逻辑变的极其混乱. 但是有时候我们不得不用它,因为它太高效了.比如进入循环内部深层一个 goto 就能回到最上层,还有可以定位到代码的任意一个位置,很是高效方便. 但是也不要所有的代码都用 goto,那样你的代码就变得像量子世界那样诡异,连你自己都控制不了. 最后一句忠告,能不用 goto 最好就不用. 首先安装一个 goto 的包(因为官方

  • C语言:利用指针编写程序,用梯形法计算给定的定积分实例

    题目要求 利用指针编写程序,用梯形法计算下列公式中的定积分: 参考代码 首先说明一下指针的用处:因为所传递的参数均为数字,并不需要使用指针提高效率,故这里使用指针指向函数. 请注意calc()函数中的这一语句: double(*pfunction)() = &function; 即实现了我所描述的过程. 代码如下: #include <stdio.h> #include <math.h> double function(double x){ return (double)(

  • C语言利用数组和文件实现登录注册功能

    C语言利用文件系统实现简单的用户登录和注册功能 版本一:利用数组 最近有个朋友让我帮他做一个C语言的登录注册功能,考虑到他没有学到数据库于是想到了存入文件 此版本使用的数组,第二个版本使用的是链表,链表是一个很好的数据结构,推荐大家用链表 第二版:链接 话不多说上代码 #include <stdio.h> #include <stdlib.h> #define USER_MAX 20 //此系统能存放最多的用户数 typedef struct { char name[10]; ch

随机推荐