C語言的do-while語句的兩種寫法
while循環(huán)和for循環(huán)都是入口條件循環(huán),即在循環(huán)的每次迭代之前檢查測試條件,所以有可能根本不執(zhí)行循環(huán)體中的內(nèi)容。C語言還有出口條件循環(huán)(exit-condition loop),即在循環(huán)的每次迭代之后檢查測試條件,這保證了至少執(zhí)行循環(huán)體中的內(nèi)容一次。這種循環(huán)被稱為do while循環(huán)。
看下面的例子:
- #include <stdio.h>
- int main(void)
- {
- const int secret_code = 13;
- int code_entered;
- do
- {
- printf("To enter the triskaidekaphobia therapy club,\n");
- printf("please enter the secret code number: ");
- scanf("%d", &code_entered);
- } while (code_entered != secret_code);
- printf("Congratulations! You are cured!\n");
- return 0;
- }
運(yùn)行結(jié)果:
- To enter the triskaidekaphobia therapy club,
- please enter the secret code number: 12
- To enter the triskaidekaphobia therapy club,
- please enter the secret code number: 14
- To enter the triskaidekaphobia therapy club,
- please enter the secret code number: 13
- Congratulations! You are cured!
使用while循環(huán)也能寫出等價(jià)的程序,但是長一些,如程序清單6.16所示。
- #include <stdio.h>
- int main(void)
- {
- const int secret_code = 13;
- int code_entered;
- printf("To enter the triskaidekaphobia therapy club,\n");
- printf("please enter the secret code number: ");
- scanf("%d", &code_entered);
- while (code_entered != secret_code)
- {
- printf("To enter the triskaidekaphobia therapy club,\n");
- printf("please enter the secret code number: ");
- scanf("%d", &code_entered);
- }
- printf("Congratulations! You are cured!\n");
- return 0;
- }
下面是do while循環(huán)的通用形式:
- do
- statement
- while ( expression );
statement可以是一條簡單語句或復(fù)合語句。注意,do-while循環(huán)以分號(hào)結(jié)尾。

Structure of a =do while= loop=
do-while循環(huán)在執(zhí)行完循環(huán)體后才執(zhí)行測試條件,所以至少執(zhí)行循環(huán)體一次;而for循環(huán)或while循環(huán)都是在執(zhí)行循環(huán)體之前先執(zhí)行測試條件。do while循環(huán)適用于那些至少要迭代一次的循環(huán)。例如,下面是一個(gè)包含do while循環(huán)的密碼程序偽代碼:
- do
- {
- prompt for password
- read user input
- } while (input not equal to password);
避免使用這種形式的do-while結(jié)構(gòu):
- do
- {
- ask user if he or she wants to continue
- some clever stuff
- } while (answer is yes);
這樣的結(jié)構(gòu)導(dǎo)致用戶在回答“no”之后,仍然執(zhí)行“其他行為”部分,因?yàn)闇y試條件執(zhí)行晚了。