帕斯卡的重复...直到与C的比赛......同时

时间:2010-06-01 23:09:40

标签: c syntax loops pascal

在C中有一个while循环和pascal(几乎)等价是重复直到循环,但两者之间有一个小的差异,而两个结构将至少迭代一次并检查它们是否需要进行循环再次最后,在pascal中你编写了需要满足的条件来终止循环(REPEAT UNTIL something)在C中你编写了需要满足的条件来继续循环(DO WHILE something)。有没有理由存在这种差异,还是只是一个武断的决定?

9 个答案:

答案 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 才能运行代码,和whiledo while s一样。

答案 3 :(得分:3)

Pascal的设计部分源于20世纪60年代的结构化编程工作,包括Edsger Dijkstra的开创性工作A Discipline of Programming。 Dijkstra(同样认为goto有害的人)发明了用于创建通过构造正确的程序的方法。这些方法包括用于编写循环的方法,这些循环关注于循环终止时建立的后置条件。在创建repeat... until形式时,Wirth受Dijkstra的启发,在代码中明确了终止条件,而不是它的补充。

我一直钦佩像Smalltalk和Icon这样的语言,它们提供两个语法形式,从而允许程序员清楚地表达他或她的意图,而不必依赖于容易错过的补语操作符。 (在图标中,表单为while e1 do e2until e1 do e2;在Smalltalk中,它们为block1 whileTrue: block2block1 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中,两个关键字dowhile适用于两种循环。 Pascal需要四个关键字:whiledorepeatuntil