首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在支持循环和函数的语言中使用'goto'是否有利?如果是这样,为什么?

在支持循环和函数的编程语言中,goto语句通常被认为是一种不良的编程实践,因为它会导致代码难以理解和维护。goto语句会导致代码的控制流变得复杂,使得程序的逻辑难以追踪。

然而,在某些特定的情况下,goto语句可能会有一些合理的用途。例如,当需要从深层嵌套的循环中跳出时,使用goto可能会使代码更简洁。但是,这种情况通常应该是非常罕见的,而且在大多数情况下,可以使用其他更清晰的编程结构(如异常处理或者标签(label))来实现相同的目的。

总之,尽管goto语句在某些特定情况下可能会有一些合理的用途,但是在大多数情况下,它应该被避免,因为它会导致代码难以理解和维护。在编写代码时,应该尽可能地使用清晰和可读性高的编程结构和编程范式。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

nextline函数_在JAVA中Scanner中的next()和nextLine()为什么不能一起使用?

不是预期的 “abc cba” 和 “efg gfe” 2. nextLine 使用举例: 输入 1: 2 abc cba 结果 1: str[0] = “” str[1] = “abc” 原因:以回车...回车符 “\r” 它被丢弃在缓冲区中,现在缓冲区中,只有一个 \r ,于是 下一次 nextLine 扫描的时候就又扫描到了 \r,返回它之前的内容,也是啥都没有 “” ,然后再把 \r 去掉, 对于...这个扫描器在扫描过程中判断停止的依据就是“结束符”,空格,回车,tab 都算做是结束符 而坑点在于 next 系列的,也就是下面这些函数:next nextInt nextDouble nextFloat...这些函数与 nextLine 连用都会有坑 坑点就是 next 系列的函数返回了数据后,会把回车符留在缓冲区,因此我们下一次使用 nextLine 的时候会碰到读取空字符串的情况 解决方案:输入都用...实际测试,BufferReader 至少比 Scanner 输入快两倍 用 Scanner 是为了循环输入的功能,也就是 hasNext() 方法的功能 今天忽然想到了可以用死循环来代替,所以,还是继续使用

2.7K10

【C语言】分支循环总结

和continue for循环 break和continue在for循环中 使用for循环的建议 do...while()循环 do while循环中的break和continue  goto语句 关机程序...这就是选择,说了这么多,其实就是在讲选择的定义,那C语言又是如何去表示的呢? if语句和swtich语句。...do while循环中的break和continue 其实dowhile循环中也可以使用break和continue,下面给出两个简单的例子: goto语句 goto语句的用法: C语言中提供了可以随意滥用的...从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。 但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过 程。...例如:一次跳出两层或多层循环。 多层循环这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。 goto 语言真正适合的场景如下: for(...)

99530
  • 【答疑解惑】为什么这么多人不喜欢用goto?

    [2]迪杰斯特拉认为不加限制地使用GOTO语句应当从高级语言中废止,因为它使分析和验证程序正确性(特别是涉及循环)的任务变得复杂。...这些批评在一些编程语言的设计上起到了效果。虽然Ada语言的设计者在二十世纪七十年代晚期意识到了对于GOTO的批评,这条语句仍旧被包含进去,主要是用来支持自动生成那些goto语句必不可少的代码。...它们的作用是无条件跳转,但是只能够跳到循环块结束的位置——继续进入下一循环(continue)或者结束循环(break) switch/case结构 C语言、C++和Java中的switch语句高效地实现了一个多路...这也导致了我们没有不得不使用goto的理由。 针对这些,导致目前goto的使用情况是这样的: goto语句的结果:在C/C++等高级编程语言中保留了goto语句,但被建议不用或少用。...3) 不能从一段复杂的执行状态中的位置goto到另外一个位置,比如,从多重嵌套的循环判断中跳出去就是不允许的。    4)应该避免像两个方向跳转。这样最容易导致"面条代码"。

    2.2K50

    --03:控制流

    以上这些好处,不正是我们梦寐以求的吗。 在不同中类的语言中,这些个类别的控制流也有不同的地位。比如命令式语言中视顺序执行为核心;函数式语言中则大量使用递归;逻辑式语言则有意的模糊控制流这种东西。...即使是在命令式语言中,副作用这个东西也是有利有弊的。...如果是无意间的修改,那么这种错误很则难定位;如果是有意修改,则会导致理解上的难度。 可以用个goto跳出跳入这种循环,比如在i没有争取初始化时就跳入循环的这种错误,编译器却没办法察觉到。...(借助标号和goto完成): lable_begin: if 条件不满足 goto lable_end //...循环体 goto lable_begin lable_end: 后置检测:这种的循环体不管是否满足循环条件...大部分情况下递归和迭代都可以互相用对方重写的。 6.1迭代和递归  早期的一些语言不支持递归(比如Fortan77以前的版本),也有一些函数式语言不允许迭代,然而大部分现代语言都是同时支持两者的。

    2K100

    解析PHP跳出循环的方法以及continue、break、exit的区别介绍

    goto goto实际上只是一个运算符,和其他语言一样,PHP中也不鼓励滥用goto,滥用goto会导致程序的可读性严重下降。...但PHP5.3及以上版本停止了对goto的支持,所以应该尽量避免使用goto。...> 上面这个例子中直接在从循环里结束了代码的运行,这样会导致后面的代码都不会被执行,如果是在一个php web 页面里面,甚至连exit后面的html代码都不会被输出。...可以从一个函数里调用,也可以从一个include()或者require()语句包含的文件里来调用,也可以是在主程序里调用,如果是在函数里调用程序将会马上结束运行并返回参数,如果是include()或者require...> 这里的例子和上面使用exit的效果是一样的。 在循环结束条件,自然跳出 这个当然是最好理解了,当循环满足循环临界条件时就是自己退出。 以上是PHP中跳出循环的几种方式的简单总结。

    5K40

    C++C与Java的区别

    类将数据和方法结合起来,把它们封装在其中,这样每个对象都可实现具有自己特点的行为。而 C++将函数和变量定义为全局的,然后再来调用这些函数和变量,从而增加了程序的负担。...七、字符串(C\C++和Java) C 和 C++不支持字符串变量,在 C 和 C++程序中使用“Null”终止符代表字符串的结束。...goto语句也称为无条件转移语句,通常与条件语句配合使用,用来实现条件转移, 构成循环,跳出循环体等功能。...Java 不提供 goto 语句,虽然Java指定 goto 作为关键字,但不支持它的使用,这使程序更简洁易读 九、类型转换 在 C 和 C++中,有时会出现数据类型的隐含转换,这就涉及了自动强制类型转换问题...Java 不支持 C++中的自动强制类型转换,如果需要,必须由程序显式进行强制类型转换。 十、缺省参数函数 Java 和C不支持缺省参数函数,而 C++支持 。 Java 没有函数。

    67730

    《快学 Go 语言》第 3 课 —— 分支与循环

    if else 语句 下面我们使用 if else 语句编写一个最大函数 max 、最小函数 min 和 正负符号函数 sign。这个例子中我们要第一次引入用户自定义的函数。...我所知道的只有 Python 语言,在 Python 里面你需要编写很多的 if else 分支语句来达到 switch 的效果。...for 循环 Go 语言虽然没有提供 while 和 do while 语句,不过这两个语句都可以使用 for 循环的形式来模拟。...} } for 语句配合 range 关键字还能玩出更多新花样,这个我们会在后面章节陆续讲解 循环控制 Go 语言支持 continue 和 break 语句来控制循环,这两个语句和其它语言没什么特殊的区别...除此之外 Go 语言还支持 goto 语句。

    39330

    02-C语言与Go语言有什么区别?(Go语言入门到精通)

    Go语言中通过包来管理代码 Go语言没有.h文件的概念, 在Go中想使用某一个函数时, 只需要import导入对应的包即可 C语言中函数、变量公私有管理 通过extern和static实现是否公开函数和变量...数据类型 = 值;undefined注释对比 Go语言定义常量和变量格式 除了以下标准格式外,Go语言还提供了好几种简单的语法糖 和C语言一样,Go语言也支持单行注释和多行注释, 并且所有注释的特性都和...C语言一样 单行注释 // 被注释内容 多行注释 /* 被注释内容*/ 在Go语言中,官方更加推荐使用单行注释,而非多行注释(详情可以直接查看Go官方源码) --- 运算符对比 算数运算符和C语言几乎一样...if、switch、for在Go语言都可以使用 C语言中的四大跳转语句return、break、continue、goto在Go语言都可以使用 Go语言除了实现C语言中if、switch、for、return...值得注意的是Go语言中没有while循环和dowhile循环, 因为它们能做的Go语言中的for循环都可以做 --- 函数和方法对比 C语言定义函数格式返回值类型 函数名称(形参列表) {

    1.3K00

    【c语言】知识记录——分支和循环(含随机数知识点)

    ,就会导致在函数内部随意乱跳转,打乱程序的执⾏流程,所以我们的建议是能不用尽量不用;     但是 goto 语句也不是⼀⽆是处,在多层循环的代码中,如果想快速跳出使⽤ goto 就⾮常的⽅便了。...在程序中我们⼀般是使用程序运行的时间作为种子的,因为时间时刻在发生变化的。...time函数的参数 timer 如果是⾮NULL的指针的话,函数也会将这个返回的差值放在timer指向的内存 中带回去。 如果 timer 是NULL,就只返回这个时间的差值。...如果只是让time函数返回时间戳,我们就可以这样写: time(NULL); //调⽤time函数返回时间戳,这⾥没有接收返回值 使用time函数的返回值设置种⼦ 因为srand的参数是unsigned...注意:srand函数是不需要频繁调用的,一次运行的程序中调用一次就够了。 随机数实战运用 见我的作品“【c语言】一些刷题遇到的小知识点—1 ”

    10710

    【C生万物】C语言分支和循环语句

    C语言把字符当成整数来处理,因此在 switch 语句中可以对字符进行判定。但是,这不适用于浮点数和字符串。...整个循环的过程中,表达式1初始化部分只被执行1次,剩下的就是表达式2、循环语句、表达式3在循环 4.3 for语句的实践 练习:在屏幕上打印1~10的值 代码: #include...d ", i); i++; } while (i<=10); return 0; } 运行结果: 6、break和continue 在循环执行的过程中,如果某些状况发生的时候,需要提前终止循环...continue 的作用是跳出本次循环 continue 后边的代码 7、goto语句 C语言提供了一种非常特别的语法,就是goto 语句和跳转标号,goto 语句可以实现在同一个函数内跳转到设置好的标号处...,就会导致在函数内部随意乱跳转,打乱程序的执行流程,所以能不用尽量不去使用;但是goto 语句也不是一无是处,在多层循环的代码中,如果想快速跳出使用goto 就非常的方便了。

    12210

    小朋友学Python(10):CC++JavaPython的关键字

    ,声明无类型指针 volatile:说明变量在程序执行中可被隐含地改变 while:循环语句的循环条件 二、C++关键字 关键字(keyword)又称保留字,是整个语言范围内预先保留的标识符。...auto 在C++98/03中这个这个关键字用于声明块中的变量的生存期为自动生存期,若是对象同时具有自动存储类,即生存期在块结束时结束。这样的变量被称为局部变量。...do,for,while 循环语句的组成部分。C++和C语言支持do-while循环、for循环和while循环。...mutable 用于类的非静态非const数据成员,表示不受到成员函数的const的限制,可以在const成员函数中使用。...16.break:作用是终止循环,程序走到break的地方就是循环结束的时候。注意,如果是多层循环的话,break只能终止最里边那层的循环。 17.except:和try一起使用,用来捕获异常。

    1.4K80

    CC++为什么要专门设计个do…while?

    最初do ... while的出现,更多的是作为循环控制流的一种语法糖。因为不论是while 还是 for循环,都是要先判断是否满足进入循环体的条件的。满足条件之后才能进入循环去执行循环体内的操作。...由于Java中int和bool不能转换,所以在Java中是: do { } while (false); 下面言归正传,关于这个用法,其实我在之前这篇文章的条款7也介绍过了。...就是逻辑中断之后直接跳到4和5。容易想到的实现思路有三: 把步骤1, 2,3抽象成函数。每次判断函数的返回值,成功才调用下一个函数。OK。这样没问题。...但是如果这种类似的逻辑很多,就要抽成很多个函数,而每个函数内只有寥寥几行代码。未免啰嗦。 使用异常。如果是Java语言应该很习惯用异常来实现这个逻辑,把顺序逻辑封在try catch块里。...另外就是抛异常也不是无开销的,而且这里只是逻辑中断,逻辑上也不算『异常』,通过throw异常和catch异常的方式未免影响代码可读性…… goto【Java没有,C和C++有】确实看过一些代码确实在这种场合使用过

    32420

    27 个问题,告诉你Python为什么这么设计

    目录 为什么Python使用缩进来分组语句? 为什么简单的算术运算得到奇怪的结果? 为什么浮点计算不准确? 为什么Python字符串是不可变的? 为什么在方法定义和调用中显式使用“self”?...任何动作都不会将值 8 更改为其他值,在 Python 中,任何动作都不会将字符串 "8" 更改为其他值。 为什么必须在方法定义和调用中显式使用“self”? 这个想法借鉴了 Modula-3 语言。...你必须记住改变程序中的两个地方 -- 第二次出现隐藏在循环的底部。 最好的方法是使用迭代器,这样能通过 for 语句来循环遍历对象。...可以使用异常捕获来提供 “goto结构” ,甚至可以跨函数调用工作的 。许多人认为异常捕获可以方便地模拟C,Fortran和其他语言的 "go" 或 "goto" 结构的所有合理用法。...但是不允许你跳到循环的中间,这通常被认为是滥用goto。谨慎使用。 为什么原始字符串(r-strings)不能以反斜杠结尾?

    6.7K11

    分支和循环(上)

    在C语言中,0为假,非0表示真,也就是表达式的结果如果是0,则语句不执行,表达式的结果如果不是0,则语句执行。一个分号就是一个语句,也就是空语句,空语句不执行。...上面式子中, i 的值是否在 i 和 k 之间,应该使用下⾯的写法。  上面的代码这样写就可以了。...9. break和continue语句 在循环执行的过程中,如果某些状况发生的时候,需要提前终止循环,这是非常常见的现象。...包含的头文件math.h. 11. goto 语句 C语言提供了一种非常特别的语法,就是 goto 语句和跳转标号, goto 语句可以实现在同一个函数 内跳转到设置好的标号处。...goto 语句如果使用的不当,就会导致在函数内部随意乱跳转,打乱程序的执行流程,所以我们的建议是能不用尽量不去使用;但是 goto 语句也不是一无是处,在多层循环的代码中,如果想快速跳出使用 goto

    5610

    Java知识面试题复习(二)Java基础语法

    ,适当地加入注释可以增加程序的可读性,有利于程序的修改、调试和交流。...Java 支持 4 种不同的访问权限。 分类 private : 在同一类内可见。使用对象:变量、方法。...关键字 Java 有没有 goto goto 是 Java 中的保留字,在目前版本的 Java 中没有使用。 final 有什么用?...(实参) this:它代表当前对象名(在程序中易产生二义性之处,应使用this来指明当前对象;如果函数的形参与类中的成员数据同名,这时需用this来指明成员变量名) super()和this()类似,...进入下一个循环条件) return 程序返回,不再执行下面的代码(结束当前的方法 直接返回) 在 Java 中,如何跳出当前的多重嵌套循环 在Java中,要想跳出多重循环,可以在外面的循环语句前定义一个标号

    32920

    CC ++与Rust的性能

    ---- GOTO-C的力量 高级和高性能编程语言的目标是生成最高效的机器代码。每种硬件体系结构都支持跳转,这意味着可以在任何条件下跳转到任何地址。...state_101: __attribute__((cold)) ... } 由于Rust不支持该goto语句,因此需要使用汇编语言通过直接跳转和最佳代码布局来实现状态机...在本演示中,Sunny解决了Rust与C ++之间的以下6个差距:转换,switch语句,更智能的循环,更智能的复制,生存期和可变性。回顾一下差距。...问题是,Rust内存安全性(现代核心C ++,静态分析和地址清理器也可以实现)是否使开发如此高效,以至于额外的代码和以两种不同语言维护的代码库可以忽略不计?...有许多不良的程序在滥用goto,因此它们只是删除了运算符:对初级用户有利,但对专业人员而言太有限了。当您在复杂的技术任务中苦苦挣扎时,语言和编译器几乎不可能给您带来惊喜。

    5.6K30

    详解C语言分支与循环语句

    分支语句 if else switch 循环语句 while for do while goto语句 1.什么是语句 在C语言当中语句可以分为以下5类: 表达式语句 函数调用语句 控制语句 复合语句...因为在switch中我们只有利用了break才能实现真正的分支。...srand所提供的种子生成,所以我们还要使用srand,但是由由于srand所提供的种子也要输入数字才可以生成,为此我在使用了time函数生成当前时间的时间戳数来充当输入的数字,以达到rand生成随机数的效果...\n"); break; } } while (input); } 4.goto语句 C语言中提供了可以随意滥用的goto语句和标记跳转的标号。...从理论上来讲goto语句是没有必要的,实际中没有goto语句也可以很容易的写成代码。 但是在某些场合下goto语句还是用的着的,最常见的用法就是终止某些深层嵌套的结构。

    10510
    领券