- 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关键字终止循环。