Categories: 程式設計

程式設計迴圈之章,while。

While是另一個常見的迴圈控制語法,在英文裡 while 有當的意思,請注意是”ㄉㄤ”不是”ㄉㄤˋ”。

「那麼 while 與 for 有何不同呢?」

除了語法上的表達不同之外,其應用的地方也不太相同。

以for來講,他最常被應用於準確的次數控制,而while則較常被使用在不明確的次數控制上,當然,在你熟悉了while之後,也是可以讓他具有與for類似的性質。

或許你會對於上述的次數控制有所疑惑,不過你不用太擔心這問題,因為顧名可思其義啊!

次數控制指的是我要指定某一特定區塊的程式執行多少次,次數到了之後便執行區塊外面的程式。有點複雜,這時你可以回到上一篇觀看 i 先生與 j 先生的例子應可略知一二。

回到正題。 while 一般的 C like 語言寫法會像這樣:

while(判斷式){
  .
  .
  ...程式碼敘述區。...
  .
  .
}

跟 for 比起來,while 精簡許多,只需要給他下一個判斷式就可以跑了。 而他的動作方式是這樣的:「當判斷式的條件成立的時候,就執行區塊裡面的程式碼,直到條件不成立時才結束執行。」

根據這個邏輯,如果寫成這樣的程式碼:

int i;
while(true){
  i++;
}

那這程式就會進入無限迴圈,直到 i 破表導致程式出現錯誤為止,不過通常這程式早已進入死當狀態…

所以, while 可以怎麼用呢? 我想可以先把 while 當作 for 來說。

試想,for 的基本使用方式是什麼? 對,就是 for(變數指定數值;下判斷式;累加) 從這裡面你發現甚麼了嗎?

是的,就是兩者的共通點「判斷式」。差別只在於,for還有另外兩個設定,也就是給某一變數的初始值以及未達到條件的累加。

那麼如何在看似 for 迴圈殘缺版的 while 有同樣的功能呢? 很簡單,只要把缺少的兩個東西放進就好啦~

像這樣…

int i=0;
while(i<10){
  printf("%d",i);
  i++;
}

這段程式碼的功能等同於

int i;
for(i=0;i<10;i++){
  printf("%d",i);
}

從以上這兩個程式就可以很明顯的看出,for 的專業在於明確的次數控制,而且閱讀起來也較容易理解。而同功能的 while 程式在閱讀上就沒有 for 這麼好理解,尤其是當 while 區塊裡要做的事情很多的時候。所以我說,while 的專業在於不明確的次數控制

既然,while 的專業是不明確的次數控制,那該怎麼利用呢? 這就要問施主您啦~((被打

這樣好像太不負責任了,讓我想想…想想…想想…想想…想想…

問各位有沒有這樣的經驗? 你說我沒問? 等我一下咩…

就是在做一件事情,但是那件事情在還沒到達某個條件前你就必須一直給他做下去,直到滿足那個條件為止

我拿寫報告來說好了,如果有一門課你必須繳出一篇報告才能過,而因為之前玩過頭,忘記做報告這件事,就當你想起來的時候,繳交的最終期限就在明天時你會怎樣?

「杯具。」

欸~ 是一場悲劇沒錯…但你還是要做啊!不然被當掉是一件很痛苦的事情…

所以你一定會熬夜將這報告完成,而你還沒完成就等於你不會過,所以,你就必須要一直做一直做做到完成它為止。這就是一種不明確的次數控制了,難道你知道你報告何時寫出來?

好吧,我承認不明確的次數控制好像有點冗長難記,簡單講就是,當條件未到,你就必須一直做這樣的意思啦~

如何?希望這例子可以讓大家更了解 while 的用途與意義,甚麼? 你說沒有範例程式?

好吧好吧…

boolean paper = false;           //報告還沒做
int words = 0, min_words = 1000; //報告要至少1000字才算有做
while(!paper){                   //當報告真的沒做
  if(words <= min_words){
    paper = true;                //報告做完了
    printf("報告做完了!");
  }
  words++;                       //字數增加中...
}
duye.chen

Recent Posts

[教學] 打造你的 NFT 智能合約 – ERC721A

GM!前些日子在幣圈亂玩,一路...

2 年 ago

JavaScript – Singleton 設計模式

前言 在設計程式時,我們有時會...

3 年 ago

PlaidML 讓你的 Mac 也能加速 Tensorflow 機器學習!

相信很多使用 Mac 或者手上...

3 年 ago

RESTful API 測試很煩,只好動手寫屬於自己的測試了

寫在最前面 嗨,大家好久不見!...

3 年 ago

Node.js 與 Socket.io – 即時聊天室實作:資料庫

經過前兩篇(一、二)文章,我們...

6 年 ago