
- C語言程式設計教程
- C語言 - 首頁
- C語言基礎
- C語言 - 概述
- C語言 - 特性
- C語言 - 歷史
- C語言 - 環境搭建
- C語言 - 程式結構
- C語言 - Hello World
- C語言 - 編譯過程
- C語言 - 註釋
- C語言 - 詞法單元
- C語言 - 關鍵字
- C語言 - 識別符號
- C語言 - 使用者輸入
- C語言 - 基本語法
- C語言 - 資料型別
- C語言 - 變數
- C語言 - 整數提升
- C語言 - 型別轉換
- C語言 - 型別強制轉換
- C語言 - 布林值
- C語言中的常量和字面量
- C語言 - 常量
- C語言 - 字面量
- C語言 - 轉義序列
- C語言 - 格式說明符
- C語言中的運算子
- C語言 - 運算子
- C語言 - 算術運算子
- C語言 - 關係運算符
- C語言 - 邏輯運算子
- C語言 - 位運算子
- C語言 - 賦值運算子
- C語言 - 一元運算子
- C語言 - 自增和自減運算子
- C語言 - 三元運算子
- C語言 - sizeof 運算子
- C語言 - 運算子優先順序
- C語言 - 其他運算子
- C語言中的決策機制
- C語言 - 決策機制
- C語言 - if 語句
- C語言 - if...else 語句
- C語言 - 巢狀 if 語句
- C語言 - switch 語句
- C語言 - 巢狀 switch 語句
- C語言中的迴圈
- C語言 - 迴圈
- C語言 - while 迴圈
- C語言 - for 迴圈
- C語言 - do...while 迴圈
- C語言 - 巢狀迴圈
- C語言 - 無限迴圈
- C語言 - break 語句
- C語言 - continue 語句
- C語言 - goto 語句
- C語言中的函式
- C語言 - 函式
- C語言 - 主函式
- C語言 - 按值呼叫函式
- C語言 - 按引用呼叫函式
- C語言 - 巢狀函式
- C語言 - 可變引數函式
- C語言 - 使用者自定義函式
- C語言 - 回撥函式
- C語言 - return 語句
- C語言 - 遞迴
- C語言中的作用域規則
- C語言 - 作用域規則
- C語言 - 靜態變數
- C語言 - 全域性變數
- C語言中的陣列
- C語言 - 陣列
- C語言 - 陣列的特性
- C語言 - 多維陣列
- C語言 - 將陣列傳遞給函式
- C語言 - 從函式返回陣列
- C語言 - 變長陣列
- C語言中的指標
- C語言 - 指標
- C語言 - 指標和陣列
- C語言 - 指標的應用
- C語言 - 指標運算
- C語言 - 指標陣列
- C語言 - 指向指標的指標
- C語言 - 將指標傳遞給函式
- C語言 - 從函式返回指標
- C語言 - 函式指標
- C語言 - 指向陣列的指標
- C語言 - 指向結構體的指標
- C語言 - 指標鏈
- C語言 - 指標與陣列的區別
- C語言 - 字元指標和函式
- C語言 - 空指標
- C語言 - void 指標
- C語言 - 懸空指標
- C語言 - 解引用指標
- C語言 - 近指標、遠指標和巨指標
- C語言 - 指標陣列的初始化
- C語言 - 指標與多維陣列的區別
- C語言中的字串
- C語言 - 字串
- C語言 - 字串陣列
- C語言 - 特殊字元
- C語言中的結構體和聯合體
- C語言 - 結構體
- C語言 - 結構體和函式
- C語言 - 結構體陣列
- C語言 - 自引用結構體
- C語言 - 查詢表
- C語言 - 點 (.) 運算子
- C語言 - 列舉 (enum)
- C語言 - 結構體填充和打包
- C語言 - 巢狀結構體
- C語言 - 匿名結構體和聯合體
- C語言 - 聯合體
- C語言 - 位域
- C語言 - typedef
- C語言中的檔案處理
- C語言 - 輸入與輸出
- C語言 - 檔案I/O (檔案處理)
- C語言預處理器
- C語言 - 預處理器
- C語言 - 預處理指令
- C語言 - 預處理器運算子
- C語言 - 宏
- C語言 - 標頭檔案
- C語言中的記憶體管理
- C語言 - 記憶體管理
- C語言 - 記憶體地址
- C語言 - 儲存類別
- 其他主題
- C語言 - 錯誤處理
- C語言 - 可變引數
- C語言 - 命令執行
- C語言 - 數學函式
- C語言 - static 關鍵字
- C語言 - 隨機數生成
- C語言 - 命令列引數
- C語言程式設計資源
- C語言 - 問答
- C語言 - 快速指南
- C語言 - 速查表
- C語言 - 有用資源
- C語言 - 討論
C語言 - 無限迴圈
在C語言中,無限迴圈(或死迴圈)是一個永不結束的迴圈結構,它會永遠執行一組語句而不會終止迴圈。它具有一個始終為真的條件,使程式能夠連續執行。
無限迴圈的流程圖
如果程式流程無條件地指向任何先前步驟,則會建立無限迴圈,如下面的流程圖所示:

無限迴圈很少被故意建立。在嵌入式無頭系統和伺服器應用程式的情況下,應用程式在無限迴圈中執行以監聽客戶端請求。在其他情況下,無限迴圈大多是由於無意的程式設計錯誤造成的。
如何在C語言中建立無限迴圈?
要建立無限迴圈,需要使用其中一個迴圈結構(while、do while 或 for),並使用非零值作為測試條件。通常使用 1 作為測試條件,可以使用任何非零值。非零值被認為是真。
示例
#include <stdio.h> int main() { while (1) { printf("Hello World"); } return 0; }
Hello WorldHello WorldHello WorldHello WorldHello WorldHello World Hello WorldHello WorldHello WorldHello WorldHello WorldHello World Hello WorldHello WorldHello ...
C語言中無限迴圈的型別
在C語言中,無限 while 迴圈、無限 do while 迴圈和無限 for 迴圈是三種無限迴圈。這些迴圈會連續執行程式碼語句。讓我們瞭解一下使用所有迴圈結構實現無限迴圈的情況。
無限 while 迴圈
使用while關鍵字可以構成計數迴圈。迴圈計劃重複執行,直到某個變數的值連續遞增到預定義的值。但是,如果程式設計師忘記在迴圈體中放置遞增語句,則測試條件根本不會到達,因此它會變成無窮大或無限的。
示例 1
請看下面的例子:
#include <stdio.h> // infinite while loop int main(){ int i = 0; while (i <= 10){ // i++; printf("i: %d\n", i); } return 0; }
輸出
由於這裡的增量語句已註釋掉,“i”的值繼續保持為“0”,因此輸出會連續顯示“i: 0”,直到您強制停止執行。
i: 0 i: 0 i: 0 ... ...
示例 2
while關鍵字的括號中有一個布林表示式,它最初計算結果為真,最終預期會變成假。請注意,任何非零數字在C語言中都被視為真。因此,下面的while迴圈是一個無限迴圈
#include <stdio.h> // infinite while loop int main(){ while(1){ printf("Hello World \n"); } return 0; }
輸出
它將無限期地列印“Hello World”。
Hello World Hello World Hello World ... ...
while迴圈的語法如下:
while (condition){ . . . . . . }
請注意,while前面沒有分號符號,這表明以下程式碼塊(在大括號內)是迴圈的主體。如果我們放置一個分號,編譯器會將其視為一個沒有主體的迴圈,因此while條件永遠不會滿足。
示例 3
在下面的程式碼中,增量語句放在迴圈塊內,但由於while前面的分號,迴圈變為無限迴圈。
#include <stdio.h> // infinite while loop int main(){ int i = 0; while(i < 10);{ i++; printf("Hello World \n"); } return 0; }
輸出
When the program is run, it won't print the message "Hello World". There is no output because the while loop becomes an infinite loop with no body.
無限 for 迴圈
C語言中的for迴圈用於對程式碼塊進行迭代,以便為變數的每個值(從其初始值到最終值)執行,每次迭代都會遞增。
請看它的語法:
for (initial val; final val; increment){ . . . . . . }
示例 1
請注意,for語句的所有三個子句都是可選的。因此,如果省略指定要測試的最終值的中間子句,則迴圈將變為無限迴圈。
#include <stdio.h> // infinite for loop int main(){ int i; for(i=1; ; i++){ i++; printf("Hello World \n"); } return 0; }
輸出
該程式會無限期地列印Hello World,直到您強制停止它,因為它對每次迴圈遞增“i”沒有影響。
Hello World Hello World Hello World ... ...
您還可以構造一個用於遞減迴圈變數值的for迴圈。在這種情況下,初始值應大於最終測試值,並且for中的第三個子句必須是一個遞減語句(使用“--”運算子)。
如果初始值小於最終值,並且第三個語句是遞減語句,則迴圈將變為無限迴圈。如果初始值較大,但錯誤地使用了增量語句,則迴圈仍然會變為無限迴圈。
因此,這兩個for迴圈都會導致無限迴圈。
示例 2
請看下面的例子:
#include <stdio.h> int main(){ // infinite for loop for(int i = 10; i >= 1; i++){ i++; printf("Hello World \n"); } }
輸出
該程式將無限迴圈列印一系列“Hello World”:
Hello World Hello World Hello World ... ...
示例 3
請看下面的例子:
#include <stdio.h> int main(){ // infinite for loop for(int i = 1; i <= 10 ; i--){ i++; printf("Hello World \n"); } }
輸出
該程式在迴圈中不斷列印“Hello World”:
Hello World Hello World Hello World ... ...
示例 4
如果括號中的所有三個語句都是空的,則迴圈顯然是無限迴圈,因為沒有條件需要測試。
#include <stdio.h> int main(){ int i; // infinite for loop for ( ; ; ){ i++; printf("Hello World \n"); } }
輸出
該程式在無窮迴圈中列印“Hello World”:
Hello World Hello World Hello World ... ...
無限 do while 迴圈
也可以使用do-while迴圈結構實現無限迴圈。必須使用 1 作為 while 的測試條件。
示例
以下示例演示了使用 do while 的無限迴圈
#include <stdio.h> int main() { do { printf("Hello World\n"); } while (1); return 0; }
Hello World Hello World Hello World Hello World ... ...
如何在C語言中中斷無限迴圈?
在程式設計中可能會有某些情況,您需要從無條件while或for語句開始,但隨後需要透過放置條件break語句來提供終止迴圈的方法。
示例
在下面的程式中,for中沒有測試語句,但我們使用了break語句使其成為有限迴圈。
#include <stdio.h> int main(){ // infinite while loop for(int i = 1; ; ){ i++; printf("Hello World \n"); if(i == 5) break; } return 0; }
輸出
該程式列印“Hello World”,直到計數器變數達到 5。
Hello World Hello World Hello World Hello World
如何在C語言中強制停止無限迴圈?
當程式進入無限迴圈時,它不會自行停止。它必須強制停止。這是透過按下“Ctrl + C”或“Ctrl + Break”或任何其他按鍵組合(取決於作業系統)來完成的。
示例
以下C程式進入無限迴圈:
#include <stdio.h> int main(){ // local variable definition int a = 0; // do loop execution LOOP: a++; printf("a: %d\n", a); goto LOOP; return 0; }
輸出
執行時,上述程式會從 1 開始列印“a”的遞增值,但不會停止。必須透過按下“Ctrl + Break”鍵來強制停止它。
a: 1 a: 2 ... ... a: 10 a: 11 ... ...
無限迴圈大多是由於程式設計錯誤而無意中建立的。即使迴圈關鍵字沒有指定終止條件,也必須使用break關鍵字終止迴圈。