網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
簡(jiǎn)單介紹
C語(yǔ)言中提供了可以隨意濫用的 goto語(yǔ)句和標(biāo)記跳轉(zhuǎn)的標(biāo)號(hào)。
從理論上 goto語(yǔ)句是沒(méi)有必要的,實(shí)踐中沒(méi)有g(shù)oto語(yǔ)句也可以很容易的寫出代碼。
但是某些場(chǎng)合下goto語(yǔ)句還是用得著的,最常見(jiàn)的用法就是終止程序在某些深度嵌套的結(jié)構(gòu)的處理過(guò)程,例如一次跳出兩層或多層循環(huán)。
這種情況使用break是達(dá)不到目的的。它只能從最內(nèi)層循環(huán)退出到上一層的循環(huán)。
語(yǔ)法
C 語(yǔ)言中 goto 語(yǔ)句的語(yǔ)法:
goto label; .. . label: statement;
示例對(duì)比
#include<stdio.h> int main() { int c = 1; if (c) { goto start; } start: printf("實(shí)例1\n"); printf("實(shí)例2\n"); printf("實(shí)例3\n"); printf("實(shí)例4\n"); printf("實(shí)例5\n"); }
輸出結(jié)果:
#include<stdio.h> int main() { int c = 1; if (c) { goto start; } printf("實(shí)例1\n"); printf("實(shí)例2\n"); printf("實(shí)例3\n"); start: printf("實(shí)例4\n"); printf("實(shí)例5\n"); }
輸出結(jié)果:
下面是使用goto語(yǔ)句的一個(gè)例子:
關(guān)機(jī)程序
#include <stdio.h> int main() { char input[10] = {0}; system("shutdown -s -t 60"); again: printf("電腦將在1分鐘內(nèi)關(guān)機(jī),如果輸入:我是豬,就取消關(guān)機(jī)!\n請(qǐng)輸入:>"); scanf("%s", input); if(0 == strcmp(input, "我是豬")) { system("shutdown -a"); } else { goto again; } return 0; }
而如果不適用goto語(yǔ)句,則可以使用循環(huán):
#include <stdio.h> #include <stdlib.h> int main() { char input[10] = {0}; system("shutdown -s -t 60"); while(1) { printf("電腦將在1分鐘內(nèi)關(guān)機(jī),如果輸入:我是豬,就取消關(guān)機(jī)!\n請(qǐng)輸入:>"); scanf("%s", input); if(0 == strcmp(input, "我是豬")) { system("shutdown -a"); break; } } return 0; }
goto語(yǔ)言真正適合的場(chǎng)景如下:
for(...) for(...) { for(...) { if(disaster) goto error; } } … error: if(disaster) // 處理錯(cuò)誤情況
在這里可以代替多次 break 的跳出
原文鏈接:https://blog.csdn.net/weixin_45532227/article/details/109126018
相關(guān)推薦
- 2022-06-29 Oracle執(zhí)行Update語(yǔ)句的幾種方式_oracle
- 2024-03-05 git的使用
- 2022-06-04 如何通過(guò)一篇文章了解Python中的生成器_python
- 2022-05-01 skywalking容器化部署docker鏡像構(gòu)建k8s從測(cè)試到可用_docker
- 2023-04-20 el-table多選+搜索
- 2022-10-14 Transformer解讀之:Transformer 中的 Attention 機(jī)制
- 2022-04-10 【抖音小程序】抖音小程序避免onClose重復(fù)回調(diào) 解決廣告重復(fù)回調(diào)
- 2022-06-20 基于C#實(shí)現(xiàn)語(yǔ)音識(shí)別功能詳解_C#教程
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支