前言
今天我們講的是控制流語句,本期內容是上期課程的延續。
控制流語句一般與循環語句一起工作,它們讓我們可以更好的控制這些循環的實際運行。
我們有三個主要的控制流語句可以使用,continue?、break?和?return,它們有不同的功能。
- continue 只能在循環中使用,它表示?進入這個循環的下一個送代(前提是:如果還有下一次迭代,如果沒有,循環就會結束)。
- break 主要用于循環中,它也會出現在 switch 語句中,break 意思是要跳出循環,也就是終止循環。
- return 應該是最有 ''力量'' 的一個語句,因為 return 會完全 ''脫離'' 你的函數,如果你在一個函數中碰到了一個 return 關鍵字,程序運行會退出這個函數,當然函數可能需要一個返回值,如果只有 return 本身,你只能返回 return 本身,return 本身只適用于 void 函數,如果你的函數需要返回值的話,它需要提供一個返回值。
我們來看一個實際的例子。下面是一段我們之前使用過的程序。
#include <iostream>int main(int argc, const char** argv)
{for(int i = 0; i <5; i++){ std::cout << i<< ":\tHello, World!\n";}return 0;
}
我們那代碼進行編譯執行,毫無疑問,會打印五次hello world
continue
我們的第一個控制流語句,是continue。
continue 將跳到 for 循環的下一個迭代,如果我按照下面的方式修改,它將不會影響 for 循環的行為,因為這個位置已經是 for 循環的結尾了,前面該執行的代碼也執行完了。
當程序運行到第八行時,不管怎樣,這一行會繼續到下一次送代,所以這根本不會改變它的行為。
然而,如果我再這樣做,你就會看到明顯的不一樣了。因為如果 i 對 2 取余等于 0 ,就會執行 continue,所以從第一個開始,每兩個迭代會跳過一個。
我們可以記錄實際的 i 變量的值來查看當前的索引值是怎么變化的。
當 i 為 0 時,它不會運行,因為 0模2 的結果是 0,結果是 true,程序會執行 continue。當 i 是1 時,我們會輸出記錄,當等于 2 時,不會輸出,當等于 3 時,我們會輸出記錄,當等于 4 時,不會輸出,程序到不了 5,因為如果等于 5,我們就不會執行 for 循環了,因為這個 for 循環的條件就是 i 小于 5。
?
break
如果我們把上面代碼中的 continue 替換成 break,你可以看到情況是完全不一樣的。
#include <iostream>int main(int argc, const char** argv)
{for(int i = 0; i <5; i++){ if(i%2 == 0)break;;std::cout << i<< ":\tHello, World!\n";}return 0;
}
程序什么都沒有輸出
我們做一下修改。
第一次迭代的時候,i 為 0, i+1 模 2 的結果是 1,所以 if 評估表達式的結果為 false,程序不會到達 break 語句。
第二次迭代的時候,i 為1, i+1 模 2 的結果是 0,所以 if 評估表達式的結果為 true,程序執行 break 語句,循環結束了。
這就是 break,它可以讓程序完全跳出 for 循環,當然這些控制流語句可以用在所有的循環語句中,所以它們在 for 循環、while 循環、do-while 循環中的運作方式是一樣的。
好了,最后一個是 return。
return
當前主函數是一個需要返回 int 的函數(第三·行有關鍵字 int ),所以我們不能只是寫 return,我們需要寫 return XXX。
我們編譯試一下
程序報錯,你可以看到程序申明必須返回一個值。
?
關于 return 語句,基本上就是這些了,需要注意的是,它不是必須在循環中使用,這點與 continue 和 break 不同。當然,如果你的函數要一個返回值,記得在 return 后面給它一個對應的值來返回。
后話
整體上說,這些控制語句就是控制你的代碼如何?流動?的。控制語句結合循環語句和 if 語句一起完成程序運行,這些就是編程的基本邏輯,你可以使用這些控制語句語句決定下一行要執行什么代碼,這些是可以改變你的程序行為的工具。
之后的系列中,我們會一直使用所有這些控制語句,并向你們展示它們在哪里使用以及怎么用。還可能向您展示如果不使用它們如何編寫代碼。