在C中有一个do while循环和pascal(几乎)等效是重复until循环,但是两者之间有一个小的差异,而两个结构将迭代至少一次,并检查他们是否只需要最后再次执行循环,在pascal中,您编写了需要满足的条件以终止循环(重复直到某事),并在C中写出需要满足的条件继续循环(DO WHILE)。是有原因存在这种差异还是只是一个任意的决定?帕斯卡的重复...直到与C的做...而
回答
我一直发现UNTIL循环倒退,但那可能只是因为我来自C背景。有像Perl这样的现代语言可以提供这两种语言,但是对于其他语言来说没有任何特别的优势
我个人也认为C版本更有意义,我来自一个pascal背景,所以一旦我开始学习C,我发现自己在C中编写了错误的条件。 – Bob 2010-06-01 23:16:22
我不确定历史影响,但在我看来C更一致,因为if
s要求条件为true代码运行,如while
s和do while
s。
和'for' , 对于这个问题。 – caf 2010-06-01 23:46:43
这只是一个武断的决定。有些语言同时具备。 QBASIC/VB DO...LOOP语句支持前测/后测和WHILE/UNTIL的所有四种组合。
没有任何“决定”以任何方式将Pascal repeat /直到循环的行为与C do/while循环的行为联系起来,既不是故意也不是任意的。这只是两个完全不相关的问题。
在C语句
while(some_condition);
可能要么是一个“什么都不做”循环或可能已经成为从“做... while”循环分离。
do {
statement;
statement;
statement;
lots more statements;
}
while(some_condition);
使用不同的关键字 - 直到 - 避免这种可能的误解。
这些日子里没有这样的问题,当大家打开所有的编译器警告并注意他们时,不是吗? 不过,我怀疑大多数资深C程序员都希望 - 在某些时候或其他 - C在这种情况下使用“直到”。
我用'while(cond)continue;'来说明循环体是空的。 – 2010-06-02 00:09:40
@Loadmaster - 好主意 - 我可能会为自己的代码采用那个。 – Dipstick 2010-06-02 06:47:24
@ChrisHarris:是的,一个循环体的空语句(一个纯分号)是一个等待发生的错误。错误的代码风格。 – 2010-06-14 20:27:29
C语法不需要额外的关键字。
在C中,两个关键字do
和while
适用于两种循环。 Pascal需要四个关键字:while
,do
,repeat
和until
。
您只需要更多关键字。 'while'for precondition,'repeat'or'do' and'until' for postcondition – 2010-06-02 05:56:17
另一方面,C回收关键字,可能导致混淆。请参阅ChrisHarris的帖子 – 2010-06-05 13:55:44
Pascal的设计部分受到20世纪60年代结构化编程工作的启发,包括Edsger Dijkstra的开创性工作A Discipline of Programming。 Dijkstra(认为goto
有害的同一个人)发明了创建方案的方法,这些方案通过施工是正确的。这些方法包括编写循环的方法,这些方法专注于循环终止时建立的后置条件。在创建repeat... until
表单时,Wirth受到了Dijkstra的启发,在代码中明确了终止条件,而不是其补充条件。
我一直钦佩如Smalltalk和图标的语言,它提供句法形式,从而使程序员能够清楚地表达自己的意图,而不必依赖于容易漏诊补运算符。 (在图标中,表格为while e1 do e2
和until e1 do e2
;在Smalltalk中,它们是block1 whileTrue: block2
和block1 whileFalse: block2
。)从我的观点来看,C和Pascal都不是完全构建出来的正交设计。
因此,如果采用perl,它甚至会与'if'互补,这是'unless',您可以将它们放在声明之前或之后。但是perl的正交性并不是真正的优势。 – 2010-06-02 05:53:22
+1,提供这两种语言的形式允许更多可读代码。 – Artelius 2010-06-03 02:58:48
- 1. 帕斯卡到C#转换
- 2. Exercice与帕斯卡尔
- 3. 字符串到帕斯卡的整数转换,怎么做?
- 4. 帕斯卡三角
- 5. 功能使帕斯卡案件? (C#)
- 6. 以帕斯卡三角形代码重复值
- 7. 德尔福/帕斯卡尔字符串文字到C/C++
- 8. 帕斯卡记录集
- 9. 帕斯卡三角SML
- 10. 帮助帕斯卡三角
- 11. 图像处理帕斯卡
- 12. 帕斯卡**定义(指数)
- 13. 帕斯卡范围溢出
- 14. 计算以帕斯卡
- 15. 约帕斯卡输出
- 16. 链表帕斯卡尔
- 17. 帕斯卡计划练习
- 18. 帕斯卡进展状态
- 19. 帕斯卡长度+圆?
- 20. 算法smbPitchShift(帕斯卡尔)
- 21. 帕斯卡 - 阵列的大小
- 22. 递归帕斯卡的三角形(Python)
- 23. 做斯卡拉
- 24. 斯卡拉的名字重复参数
- 25. 帕斯卡尔案例在C#中的属性
- 26. C组合中的帕斯卡三角形
- 27. 帕斯卡的三角形程序间距C++
- 28. 添加值到帕斯卡尔的阵列 - iIllegal限定词”
- 29. 帕斯卡尔布尔返回值?
- 30. 德尔福/帕斯卡尔例
下面是一些复制和粘贴到您的代码的备用:!!!!!!!!!!!! – 2010-06-01 23:14:19
Hellfreezeover:= false;重复直到Hellfreezeover – 2011-06-30 21:16:50