在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. 帕斯卡重複標識
- 2. 帕斯卡到C#轉換
- 3. c與gmp的帕斯卡三角形
- 4. 帕斯卡到C:TRUNC
- 5. Exercice與帕斯卡爾
- 6. 帕斯卡公式的複雜性
- 7. 從帕斯卡
- 8. 在卡斯帕
- 9. 字符串到帕斯卡的整數轉換,怎麼做?
- 10. 帕斯卡的理解
- 11. 帕斯卡三角
- 12. 帕斯卡漢譯
- 13. 由帕斯卡爾
- 14. 功能使帕斯卡案件? (C#)
- 15. 帕斯卡三角像在C
- 16. 在免帕斯卡回調從C++ DLL
- 17. 如何檢查數字是否以帕斯卡重複?
- 18. 以帕斯卡三角形代碼重複值
- 19. 斯卡拉直到環路與浮點
- 20. 德爾福/帕斯卡爾字符串文字到C/C++
- 21. 帕斯卡。轉換INT到字節
- 22. 使用在帕斯卡
- 23. 帕斯卡進展狀態
- 24. 帕斯卡**定義(指數)
- 25. 帕斯卡小數點
- 26. 帕斯卡長度+圓?
- 27. 帕斯卡三角SML
- 28. 約帕斯卡輸出
- 29. 零指針帕斯卡爾
- 30. Python - 帕斯卡三角形
下面是一些複製和粘貼到您的代碼的備用:!!!!!!!!!!!! – 2010-06-01 23:14:19
Hellfreezeover:= false;重複直到Hellfreezeover – 2011-06-30 21:16:50