C语言while循环的用法(非常详细,附带实例)

news2025/5/14 8:46:04

while 是 C 语言中的一种循环控制结构,用于在特定条件为真时重复执行一段代码。

while 循环的语法如下:

while (条件表达式) {
    // 循环体:条件为真时执行的代码
}

  • 条件表达式:返回真(非 0)或假(0)的表达式,决定是否继续循环。
  • 大括号 {}:定义循环体,若只有一行语句,可省略,但建议保留以提高可读性。

while 循环的核心是一个条件表达式,当条件为真(非 0)时,循环体内的代码会反复执行,直到条件变为假(0)。while 循环的运行流程是:

  1. 检查 条件表达式
  2. 若为真,执行循环体,然后返回步骤 1。
  3. 若为假,退出循环,继续执行后续代码。

也就是说,while 循环的逻辑是:“只要条件成立,就继续执行。” 

在 C语言中,while 循环特别适合那些循环次数不固定、依赖条件判断的场景。接下来,我们将深入探讨 while 循环的用法、使用场景以及注意事项。

【实例】简单计数。

/**
*  系统学习C语言 https://xiecoding.cn/c/
**/
#include <stdio.h>

int main(void) {
    int count = 0;
    while (count < 5) {
        printf("计数:%d\n", count);
        count++;
    }
    return 0;
}

输出结果:

计数:0
计数:1
计数:2
计数:3
计数:4

count < 5 初始为真,循环体执行 5 次,每次 count 自增,直到 count = 5,条件为假,循环结束。

while常见使用场景

1) 已知次数的循环

虽然 while 更适合动态条件,但也可以用于固定次数的循环。

/**
*  系统学习C语言 https://xiecoding.cn/c/
**/
#include <stdio.h>

int main(void) {
    int i = 1;
    while (i <= 10) {
        printf("%d ", i);
        i++;
    }
    printf("\n");
    return 0;
}

输出结果:

1 2 3 4 5 6 7 8 9 10

2) 累加计算

用 while 实现累加或求和。

/**
*  系统学习C语言 https://xiecoding.cn/c/
**/
#include <stdio.h>

int main(void) {
    int sum = 0, num = 1;
    while (num <= 100) {
        sum += num;
        num++;
    }
    printf("1 到 100 的和是:%d\n", sum);
    return 0;
}

输出结果:

1 到 100 的和是:5050

sum 累加每次的 num,直到 num > 100

3) 输入验证

while 常用于等待用户输入符合条件。

/**
*  系统学习C语言 https://xiecoding.cn/c/
**/
#include <stdio.h>

int main(void) {
    int num;
    printf("请输入一个正数:");
    scanf("%d", &num);
    while (num <= 0) {
        printf("输入错误,请输入一个正数:");
        scanf("%d", &num);
    }
    printf("你输入的正数是:%d\n", num);
    return 0;
}

输出结果(示例输入):

请输入一个正数:-5
输入错误,请输入一个正数:0
输入错误,请输入一个正数:3
你输入的正数是:3

C语言do-while循环

C语言还提供 do-while 循环,与 while 的区别是条件后置,至少执行一次循环体:

do {
    // 循环体:先执行一次
} while (条件表达式);

【实例】do-while 用法
/**
*  系统学习C语言 https://xiecoding.cn/c/
**/
#include <stdio.h>

int main(void) {
    int num = 0;
    do {
        printf("num = %d\n", num);
        num++;
    } while (num < 3);
    return 0;
}

输出结果:

num = 0
num = 1
num = 2

即使初始 num = 0,循环体先执行一次,然后检查条件。

while注意事项

1) 避免死循环

若条件永远为真,会导致死循环。

// 错误示例
while (1) { printf("无限循环\n"); } // 死循环

解决方法:确保条件最终会变为假,或使用 break 跳出。

2) break和continue

break 立即退出循环,continue 跳过本次循环剩余部分。

/**
*  系统学习C语言 https://xiecoding.cn/c/
**/
#include <stdio.h>

int main(void) {
    int i = 0;
    while (i < 10) {
        i++;
        if (i == 3) continue; // 跳过 3
        if (i == 7) break;    // 在 7 退出
        printf("%d ", i);
    }
    printf("\n");
    return 0;
}

输出结果:

1 2 4 5 6

3) 条件表达式类型

条件必须返回整数值(非 0 为真,0 为假),避免使用浮点数直接比较。

// 不推荐
float f = 0.1;
while (f < 1.0) { ... } // 浮点误差可能导致问题

总结

while 是 C 语言程序常用的一种循环结构,适合处理条件动态变化的重复任务。

学习 while 循环语句,除了它本身的语法外,你还需要掌握 do-while 变体以及 breakcontinue 的用法,才能灵活控制程序的执行流程。

在 C 语言程序中使用 while 循环语句时,要避免出现死循环的情况。读完本文,恭喜你已经彻底掌握 while 循环语句的用法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2375242.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript进阶(九)

第三部分:JavaScript进阶 目录 第三部分:JavaScript进阶 一、作用域 1.1 局部作用域 1. 作用域 2. 局部作用域 函数作用域 块作用域 1.2 全局作用域 1.3 作用域链 1.4 JS垃圾回收机制 1. 什么是垃圾回收机制 2. 内存的声明周期 3. 垃圾回收的算法说明 引用计数…

数据结构与算法分析实验11 实现顺序查找表

实现顺序查找表 1.上机名称2.上机要求3.上机环境4.程序清单(写明运行结果及结果分析)4.1 程序清单4.1.1 头文件4.1.2 实现文件4.1.3 源文件 4.2 实现展效果示 上机体会 1.上机名称 实现顺序查找表 顺序查找表的基本概念 顺序查找表是一种线性数据结构&#xff0c;通常用于存储…

获取高德地图JS API的安全密钥和Key的方法

要使用高德地图JavaScript API&#xff0c;您需要获取API Key和安全密钥(securityJsCode)。以下是获取步骤&#xff1a; 1. 注册高德开放平台账号 首先访问高德开放平台&#xff0c;如果没有账号需要先注册。 2. 创建应用获取Key 登录后进入"控制台" 点击"应…

JAVA研发+前后端分离,ZKmall开源商城B2C商城如何保障系统性能?

在电商行业竞争白热化的当下&#xff0c;B2C 商城系统的性能表现成为决定用户留存与商业成败的关键因素。ZKmall 开源商城凭借 Java 研发与前后端分离架构的深度融合&#xff0c;构建起一套高效、稳定且具备强大扩展性的系统架构&#xff0c;从底层技术到上层应用全方位保障性能…

嵌入式自学第二十天(5.13)

&#xff08;1&#xff09;线性表顺序存储的优缺点&#xff1a; 优点&#xff1a;无需为表中逻辑关系添加额外存储空间&#xff1b; 可以快速随机访问元素&#xff0c;时间复杂度O(1)。 缺点&#xff1a;插入删除需要移动元素O(n&#xff09;&#xff1b; 无法动态存储。 …

快速上手Linux nfs网络文件系统

一、nfs服务的安装与部属 1.安装软件 设置火墙 测试&#xff1a;在客户端上安装nfs-utils后 showmount 服务端IP 2.共享资源 测试&#xff1a; 参数&#xff08;参数写在共享策略文件的括号里&#xff09; 二、nfs客户端动态挂载机制 当客户端和服务器之间没有数据交互时&am…

26考研——中央处理器_异常和中断机制(5)

408答疑 文章目录 五、异常和中断机制异常和中断的基本概念异常和中断的分类异常的分类故障 (Fault)自陷 (Trap)终止 (Abort) 中断的分类可屏蔽中断不可屏蔽中断 异常和中断响应过程关中断保存断点和程序状态识别异常和中断并转到相应的处理程序 八、参考资料鲍鱼科技课件26王道…

数据库实验报告 SQL SERVER 2008的基本操作 1

实验报告&#xff08;第 1 次&#xff09; 实验名称 SQL SERVER 2008的基本操作 实验时间 9月14日1-2节 一、实验内容 数据库的基本操作:包括创建、修改、附加、分离和删除数据库等。 二、源程序及主要算法说明 本次实验不涉及程序和算法。 三、测…

Nature图形复现—两种快速绘制热图的方法

相信大家在科研过程中&#xff0c;会遇到热图&#xff0c;有时候会觉得热图理解起来比较困难&#xff0c;或者觉得绘制热图也比较困难。本期教程我们来深入了解热图、绘制热图。 热图是一种通过颜色深浅或色阶变化来直观展示数据分布、密度或数值大小的可视化工具。它在多个领域…

INFINI Console 纳管 Elasticsearch 9(一):指标监控、数据管理、DSL 语句执行

Elasticsearch v9.0 版本最近已发布&#xff0c;而 INFINI Console 作为一款开源的非常轻量级的多集群、跨版本的搜索基础设施统一管控平台&#xff0c;是否支持最新的 Elasticsearch v9.0 集群管理呢&#xff1f;本文以 INFINI Console v1.29.2 为例&#xff0c;从指标监控、数…

texlive 与 Texmaker 安装

一、安装 Texmaker 1、下载Texmaker 链接地址: Texmaker (free cross-platform latex editor) 点击 FREE DOWNLOAD &#xff0c;点击 Texmaker_6.0.1_Win_x64.msi &#xff0c;下载即可。 2、安装Texmaker 双击如下文件 若出现如下&#xff0c;点击更多信息 点击仍要运行 …

机试刷题:进制转换3

题目来源&#xff1a;N诺 一、题目描述 二、解题思路 过程模拟&#xff0c;先转换为十进制&#xff0c;再转换为N进制即可。 注意&#xff1a;转换的时候可能出现字母&#xff0c;注意字母的表示。 用string和char类型对数据进行存储要更方便。 #include <iostream>…

(顺序表、单链表、双链表)==>一篇解决!(Java版)

文章目录 一、线性表二、顺序表三、单链表四、双链表 一、线性表 线性表是最基本、最简单、也是最常用的一种数据结构。一个线性表是n个具有相同特性的数据元素的有限序列。 线性表的特征&#xff1a;数据元素之间具有一种“一对一”的逻辑关系。 线性表的分类&#xff1a; 线…

JPG与PDF格式转换器

该插件可实现JPG与PDF格式的互转。 MainForm.Designer.cs using System.Windows.Forms; namespace JpgToPdfConverter {partial class MainForm{private System.ComponentModel.IContainer components null;protected override void Dispose(bool disposing){if (disposing &…

手搓传染病模型(SEIARW)

在传染病传播的研究中&#xff0c;水传播途径是一个重要的考量因素。SEAIRW 模型&#xff08;易感者 S - 暴露者 E - 感染者 I - 无症状感染者 A - 康复者 R - 水中病原体 W&#xff09;综合考虑了人与人接触传播以及水传播的双重机制&#xff0c;为分析此类传染病提供了全面的…

【Mac 从 0 到 1 保姆级配置教程 15】- Python 环境一键安装与配置,就是这么的丝滑

文章目录 前言安装 Python 环境VSCode 配置Python 环境NeoVim 配置 Python 环境&#xff08;选看&#xff09;1. Python LSP 配置2. 打开 python 语言支持 最后参考资料系列教程 Mac 从 0 到 1 保姆级配置教程目录&#xff0c;点击即可跳转对应文章&#xff1a; 【Mac 从 0 到 …

【递归、搜索与回溯】专题一:递归(二)

&#x1f4dd;前言说明&#xff1a; 本专栏主要记录本人递归&#xff0c;搜索与回溯算法的学习以及LeetCode刷题记录&#xff0c;按专题划分每题主要记录&#xff1a;&#xff08;1&#xff09;本人解法 本人屎山代码&#xff1b;&#xff08;2&#xff09;优质解法 优质代码…

Spark缓存-cache

一、RDD持久化 1.什么时候该使用持久化&#xff08;缓存&#xff09; 2. RDD cache & persist 缓存 3. RDD CheckPoint 检查点 4. cache & persist & checkpoint 的特点和区别 特点 区别 二、cache & persist 的持久化级别及策略选择 Spark的几种持久化…

记录算法笔记(2025.5.13)二叉树的最大深度

给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3 示例 2&#xff1a; 输入&#xff1a;root [1,null,2] …

【Linux】简单设计libc库

&#x1f4dd;前言&#xff1a; 经过之间两篇文章&#xff0c;【Linux】基础IO&#xff08;一&#xff09;和【Linux】基础IO&#xff08;二&#xff09;的学些&#xff0c;我们对文件的基础IO已经有了一定的理解。 这篇文章我们来简单设计一下libc库&#xff0c;来复习一下文…