Tag: 转到

Scanf将不会执行第二次

我正在尝试: – 如果用户input无效值,则重新读取值。 但问题是scanf()只执行一次,不会执行任何其他的时间和程序卡住无限循环。 #include<stdio.h> #include<math.h> main() { unsigned int a; unsigned int b = pow(2,M-1); unsigned int c; int x; printf("b = %i",b); input: fflush(stdin); fflush(stdout); printf("\nEnter any integer: "); x = scanf("%u",&a); printf("%u",a); if(x==0) goto input; printf("\na = %i",a); c = a & b; printf("\nc = %i",c); if(c) printf("\nthe bit %i is set",M); […]

有人还在C#中使用,如果有的话,为什么?

我想知道是否任何人仍然使用C#中的“goto”关键字语法和可能的原因有这样做。 我倾向于认为任何导致读者跳出代码的言论都是不好的做法,但是想知道是否有任何可信的scheme来使用这种语法? 转到关键字定义

bash中是否有“goto”声明?

bash中是否有“goto”声明? 我知道这被认为是不好的做法,但我特别需要“转到”。

我怎样才能在Javascript中使用goto?

我有一些代码,我绝对必须使用goto来实现。 例如,我想编写一个像这样的程序: start: alert("RINSE"); alert("LATHER"); repeat: goto start 有没有办法在Javascript中做到这一点?

(Windows批处理)如果块内转到很奇怪的行为

如果我拿下面的Windows批处理代码片段并运行它: echo foo if 1 == 1 ( echo bar goto asdf :asdf echo baz ) else ( echo quux ) 我期望的输出是: foo bar baz 但是,我得到: foo bar baz quux 如果我注释掉goto asdf行,它会给出我期望的结果。 echo quux行不应该被执行,为什么goto会导致这种情况发生? 更新:为什么它的价值,这是一个解决方法,正确做我原本的目的: goto BEGIN :doit echo bar goto asdf :asdf echo baz goto :EOF :BEGIN echo foo if 1 == 1 ( […]

将使用goto泄漏variables?

goto跳过代码而不调用析构函数和事物是否是真的? 例如 void f() { int x = 0; goto lol; } int main() { f(); lol: return 0; } x不会泄露?

使用goto有什么问题?

可能重复: 为什么使用goto不好? GOTO仍然认为有害? 我通过xkcd了解并看到了这个(如果在几年前还读了一些有关它们的消极文字): 究竟是什么错呢? 为什么goto在C ++中甚至有可能呢? 为什么我不应该使用它们?

在C或C ++好的gotos的例子

在这个线程中,我们看一下在C或者C ++中使用goto例子。 它的灵感来自人们投票决定的答案 ,因为他们以为我在开玩笑。 总结(标签从原来的变化更明确): infinite_loop: // code goes here goto infinite_loop; 为什么比替代品更好: 这是具体的。 goto是导致无条件分支的语言结构。 替代scheme取决于使用支持条件分支的结构,具有退化的始终为真的条件。 标签文件的意图没有额外的意见。 读者不必扫描早期break的干预代码(尽pipe对于一个无原则的黑客来说仍然有可能模拟continue早期goto )。 规则: 假装gotophobes没有赢。 据了解,上述不能用于实际的代码,因为它违背成熟的习惯用法。 假设我们都听说过“后藤认为有害”,并知道goto可以用来写意大利面代码。 如果你不同意这样一个例子,就单凭技术上的优点来批评它(“因为人们不喜欢转职”不是技术上的原因)。 让我们看看我们是否可以像大人一样谈论这个问题。 编辑 这个问题现在似乎已经完成 它产生了一些高质量的答案。 感谢大家,尤其是那些认真对待我的小循环例子的人。 大多数怀疑者担心缺乏范围。 正如@quinmars在评论中指出的,你总是可以在循环体上加上大括号。 我顺便注意到for(;;)和while(true)不要给你任意的花括号(并且省略它们会导致烦人的错误)。 无论如何,我不会再为了这个小事而浪费你的大脑力量 – 我可以忍受for(;;)和while(true) (如果我想保住我的工作)那样的无害和习惯。 考虑到其他的反应,我发现很多人把goto看成是你必须以另一种方式重写的东西。 当然,你可以通过引入一个循环,一个额外的标志,一堆嵌套的if或其他东西来避免goto ,但是为什么不考虑goto是否是最好的工具呢? 换句话说,人们为了达到预期的目的而准备忍受多less丑陋,以避免使用内置的语言特征? 我的意见是,即使添加一个标志是太高的价格付出。 我喜欢我的variables来表示问题或解决scheme域中的东西。 “单纯为了避免转向”不会削减它。 我会接受第一个给C模式分支到清理块的答案。 国际海事组织,这是所有张贴答案goto最强大的情况下,当然,如果你衡量一个憎恨必须经历,以避免它的扭曲。

GOTO仍然认为有害?

每个人都知道Dijkstra 给编辑的信件:去看看被认为是有害的声明 (也在这里 .html成绩单和here.pdf),从那时起,已经有一个强大的推动,尽可能避开goto声明。 尽pipe可以使用goto来生成不可维护,庞大的代码,但仍然保留在现代编程语言中 。 即使是Scheme中先进的继续控制结构也可以被描述成一个复杂的goto。 什么情况下可以使用goto? 什么时候最好避免? 作为一个后续问题:C提供了一对函数setjmp和longjmp,它们提供了不仅在当前栈帧内而且在任何调用帧内跳转的function。 这些被认为是危险的吗? 更危险? 迪克斯特拉本人对这个称号感到后悔,对此他不负责任。 在EWD1308 (也在这里 .pdf)的末尾,他写道: 最后一个小故事的logging。 1968年,ACM通讯刊登了一篇题为“ goto声明被认为是有害的 ”的文本,而在后来的这些文章中,这个文章经常被引用,然而令人遗憾的是,经常被那些看不到它的作者标题,通过成为一个模板,成为了我的名气的基石:几乎所有的X,包括一个名为“Dijkstra认为有害”的标题,我们会看到各种各样的标题“X认为有害的”。 但是发生了什么? 我已经提交了一个名为“ 一个反对goto声明的案子 ”的文章,为了加快出版速度,编辑变成了“给编辑的一封信”,在这个过程中,他给了它一个新的他自己发明的头衔! 编辑是Niklaus Wirth。 关于这个主题的经过深思熟虑的经典论文,与Dijkstra相匹配的是由Donald E. Knuth撰写的“ 结构化程序devise” 。 阅读都有助于重新build立背景和对这个问题的非教条理解。 在这篇论文中,迪克斯特拉对这个案子的看法是有报道的,而且更为强烈: Donald E. Knuth:我相信通过提出这样的观点,我并不认同迪克斯特拉的观点,因为他最近写了这样一段话:“请不要陷入相信我对于去声明] 我有这样一种不舒服的感觉,就是其他人正在把它当作宗教,就好像编程的概念问题可以通过一个简单的编程技巧来解决!