在C中有一个while循环和pascal(几乎)等价是重复直到循环,但两者之间有一个小的差异,而两个结构将至少迭代一次并检查它们是否需要进行循环再次最后,在pascal中你编写了需要满足的条件来终止循环(REPEAT UNTIL something)在C中你编写了需要满足的条件来继续循环(DO WHILE something)。有没有理由存在这种差异,还是只是一个武断的决定?
答案 0 :(得分:9)
根本没有根本的区别,一方面没有优势。它只是“语法糖” - 对语言语法的改变,不会以任何实际方式改变其行为。有些人发现“重复直到”更容易概念化,而其他人则发现“重复”更容易。
如果在C语言中遇到“直到”是你的愿望的情况,你总是可以否定这个条件:
do {
excitingThings();
} while ( !endOfTheWorld() );
答案 1 :(得分:4)
在C语句中
while(some_condition);
可能是“无所事事”循环,也可能与“do ... while”循环分离。
do {
statement;
statement;
statement;
lots more statements;
}
while(some_condition);
使用不同的关键字 - 直到 - 避免这种可能的错误解释。
现在每个人都打开所有编译器警告并注意它们时不是这样的问题,不是吗? 尽管如此,我怀疑大多数资深C程序员都希望 - 在某些时候或其他时候 - 在这种情况下C使用“直到”。
答案 2 :(得分:3)
我不确定历史影响,但在我看来,C更加一致,因为if
需要条件为 true 才能运行代码,和while
和do while
s一样。
答案 3 :(得分:3)
Pascal的设计部分源于20世纪60年代的结构化编程工作,包括Edsger Dijkstra的开创性工作A Discipline of Programming。 Dijkstra(同样认为goto
有害的人)发明了用于创建通过构造正确的程序的方法。这些方法包括用于编写循环的方法,这些循环关注于循环终止时建立的后置条件。在创建repeat... until
形式时,Wirth受Dijkstra的启发,在代码中明确了终止条件,而不是它的补充。
我一直钦佩像Smalltalk和Icon这样的语言,它们提供两个语法形式,从而允许程序员清楚地表达他或她的意图,而不必依赖于容易错过的补语操作符。 (在图标中,表单为while e1 do e2
和until e1 do e2
;在Smalltalk中,它们为block1 whileTrue: block2
和block1 whileFalse: block2
。)从我的角度来看,C和Pascal都不是完全构建的,正交设计
答案 4 :(得分:1)
这只是一个武断的决定。有些语言都有。 QBASIC / VB DO...LOOP语句支持pretest / posttest和WHILE / UNTIL的所有四种组合。
答案 5 :(得分:1)
没有任何“决定”会以任何方式将Pascal repeat / until的行为与C do / while循环的行为联系起来,既不是故意的也不是任意的。这些只是两个完全不相关的问题。
答案 6 :(得分:1)
只是一些信息。
Road Runner:>>> import numpy as np
>>> a = np.zeros((156816, 36, 53806), dtype='uint8')
>>> a.nbytes
303755101056
Wily E土狼:while(not edge) { run(); }
答案 7 :(得分:0)
我总是发现UNTIL循环向后,但这可能只是因为我来自C背景。有像Perl这样的现代语言可以提供这两种语言,但是对于其他语言没有任何特别的优势
答案 8 :(得分:0)
C语法不需要额外的关键字。
在C中,两个关键字do
和while
适用于两种循环。 Pascal需要四个关键字:while
,do
,repeat
和until
。