9. 【C语言】重复是力量:C语言循环结构

掌控重复的力量:深入理解 C 语言的 while 循环 ​​while​​ 循环是 C 语言中实现重复执行代码的重要结构,其核心特点是“先判断,后执行”。它适用于那些循环次数不确定,只知道需要在一个条件为真时持续执行的场景。掌握 ​​while​​ 循环的关键在于理解其执行流程,以及如何通过在循环体内部更新循环控制变量来确保循环最终能够终止,避免可怕的死循环。除了 ​​while​​ 循环,C 语言还有 ​​do-while​​ 和 ​​for​​ 循环,它们各有特点,适用于不同的循环需求。 阅读详情

前几篇文章,我们让程序有了记忆(变量),会说话(输入输出),还学会了判断(分支)。但程序还有一个让人类望尘莫及的本事:不知疲倦地重复做一件事。

想想看,让你把“你好”写 100 遍,你可能会烦;但程序用一个循环,不到一毫秒就能完成。循环是计算机真正的效率利器,它能把几行代码的执行次数放大成千上万倍。

C 语言给了你三把循环的工具:while、do-while、for,外加两个控制循环走向的关键字 break 和 continue。今天我们就来掌握它们。


一、while 循环:先问再做

while 循环的逻辑最简单:只要条件成立,就重复执行循环体。每次执行前都会先检查条件,如果一开始就不成立,循环体一次都不会执行。

while (条件) {
    // 循环体
}

一个最经典的例子——从 1 数到 5:

#include <stdio.h>

int main(void) {
    int i = 1;                  // 初始化
    while (i <= 5) {            // 条件
        printf("%d ", i);
        i++;                    // 更新循环变量
    }
    printf("\n");
    return 0;
}

输出:

1 2 3 4 5

如果把 i++ 忘掉,i 永远是 1,条件永远成立,程序就会陷入无限循环。写 while 循环时,一定问自己三个问题:

  • 循环变量初始化了没有?
  • 条件最终会不会变成假?
  • 每次循环有没有朝“假”的方向前进一步?

这三个问题是防止死循环的“三把锁”。


二、do-while 循环:先做再问

while 的变体,它把条件检查挪到了循环体之后。这意味着不管条件如何,循环体至少执行一次。

do {
    // 循环体
} while (条件);

注意:while (条件); 后面的分号不能少——这是初学者最容易掉的坑之一。

一个典型的场景:要求用户输入一个正数,不合法就一直提示重新输入。

#include <stdio.h>

int main(void) {
    int number;
    do {
        printf("请输入一个正数:");
        scanf("%d", &number);
    } while (number <= 0);

    printf("你输入了 %d,谢谢!\n", number);
    return 0;
}

用户的输入在循环体里读,然后再判断。因为“读”的动作必须先执行一次,所以用 do-while 比 while 更自然。


三、for 循环:最紧凑的循环体

大多数循环都有三步曲:初始化、条件检查、更新循环变量。for 循环把它们一行搞定,让代码紧凑易读。

for (初始化; 条件; 更新) {
    // 循环体
}

执行顺序是:

  1. 执行初始化(只执行一次)
  2. 检查条件,如果为假则退出循环
  3. 执行循环体
  4. 执行更新
  5. 跳回第 2 步

用 for 重写 1 到 5 的计数:

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

括号里三个部分都可以省略(分号必须保留),但省略要有充足理由。比如:

  • for (; i < 10; i++):初始化放到外面
  • for (;;):无限循环(等价于 while(1))

for 循环里声明的变量(如 int i)在 C99 标准中是允许的,作用域仅限于循环内。如果你的编译器比较老(如某些 C89 模式),可能需要把变量声明提到循环外。


四、break 与 continue:循环的半路控制

有时候循环不必傻傻跑到条件变为假,可以在中途就跳出,或者跳过剩下的部分直接开始下一轮。这就需要 break 和 continue。

break:直接跳出循环

for (int i = 1; i <= 10; i++) {
    if (i == 5) {
        break;    // 碰到 5 就终止整个循环
    }
    printf("%d ", i);
}

输出:1 2 3 4(i=5 时直接跳出,后面的 6-10 都不打)

continue:跳过本轮剩余部分,进入下一轮

for (int i = 1; i <= 5; i++) {
    if (i == 3) {
        continue; // 跳过 i=3 时的打印,直接去 i++
    }
    printf("%d ", i);
}

输出:1 2 4 5(3 被跳过了)

注意:在 while 和 do-while 里用 continue 要特别小心——它会跳转到条件检查处,可能导致更新语句被跳过而形成死循环。比如:

int i = 0;
while (i < 5) {
    if (i == 2) continue;
    printf("%d ", i);
    i++;  // 当 i=2 时 continue,i++ 被跳过,永远停在 2,死循环
}

所以在 while 里用 continue,要确保变量的更新发生在 continue 之前。


五、嵌套循环与经典案例:九九乘法表

循环里面可以再套循环,形成嵌套循环。外循环每执行一次,内循环就会完整地跑一遍。它常用来处理二维表格、矩阵、图形打印等问题。

一个最典型的例子:打印九九乘法表。

#include <stdio.h>

int main(void) {
    for (int i = 1; i <= 9; i++) {          // 外循环控制行
        for (int j = 1; j <= i; j++) {      // 内循环控制列,注意 j <= i 形成下三角
            printf("%d×%d=%-2d  ", j, i, i * j);
        }
        printf("\n");  // 一行结束,换行
    }
    return 0;
}

输出:

1×1=1  
1×2=2  2×2=4  
1×3=3  2×3=6  3×3=9  
1×4=4  2×4=8  3×4=12 4×4=16 
...
1×9=9  2×9=18 3×9=27 4×9=36 5×9=45 6×9=54 7×9=63 8×9=72 9×9=81 

%-2d 表示左对齐占 2 个宽度,让排版整齐。试试把 j <= i 改成 j <= 9,你就会看到完整的矩形表,而不仅仅是下三角。

嵌套循环时注意:内循环变量和外循环变量不要用同一个名字(除非你非常清楚作用域规则),不然内层的修改会干扰外层。


六、三大循环的选择指南

场景推荐原因
循环次数已知(如遍历数组)for初始、条件、更新集中,清晰
循环次数未知,先判断再执行while条件在最前面,符合直觉
循环次数未知,至少执行一次do-while体在条件前,保证首次执行

实际使用中,for 和 while 可以互相转换,大多数场景用 for 就能胜任。但当你需要先读数据再判断是否继续时,do-while 就展现出它的优势。


七、常见错误与陷阱

  1. while 后多加分号

    int i = 0;
    while (i < 5); {   // 分号让循环体变成空的,死循环
        printf("%d", i);
        i++;
    }
    
  2. do-while 后忘分号
    do { ... } while (cond) 末尾必须带分号。

  3. 循环变量忘记更新
    while 体内缺少 i++,导致死循环。

  4. for 括号里用逗号替代分号
    for (int i = 0, i < 10, i++) 错误,分号必须保留。

  5. 在 while/do-while 中用 continue 导致更新跳过
    如前例,务必先更新再 continue,或者改用 for 循环。

  6. 循环边界错误
    比如 i <= 10 写成 i < 10,会少一次。初学者要仔细检查边界。


八、小结

循环让程序有了重复执行的能力,结合之前学的变量和分支,你已经可以写出有逻辑的、能处理批量数据的小程序了。while、do-while、for 各有适用的场合,break 和 continue 给了你更精细的控制。嵌套循环则打开了处理二维问题的大门。

但很快你会面临一个新问题:如果我想存一个班所有学生的成绩,难道要声明 score1、score2……score50 这样 50 个变量吗?那显然太蠢了。下一篇文章,我们就迎来一个重要的新工具——数组,它能让你用一个名字管理一串数据,让程序处理大量数据变得轻而易举。


课后小练习

  1. 用 while 循环计算 1 到 100 的累加和并输出。
  2. 用 for 循环打印斐波那契数列的前 20 项(1, 1, 2, 3, 5, 8…),每行输出 5 个数。
  3. 用嵌套循环打印如下图形:
    *
    **
    ***
    ****
    *****
    
  4. 写一个猜数字游戏:程序预设一个 1-100 的整数(可以先固定写死一个值),让用户猜,每次猜完提示“大了”或“小了”,直到猜中为止。统计猜了多少次。用 do-while 或 while 实现。

题外话
如果你正在学C语言或计划学C语言,请订阅免费专栏《C语言:从入门到精通》。这是一个循序渐进的 C 语言博客系列,从最基础的环境搭建一路到高阶的系统编程技巧,帮你构建一个完整的知识体系。不需要积分,不需要VIP!

我们下期见!

💡获取本系列示例代码请访问 GitCode 仓库。

C语言入门:从Hello World到指针与内存管理的核心概念解析 编程语言是计算机科学的基础工具,其核心在于将人类逻辑转化为机器可执行的指令。C语言作为一门接近底层的系统编程语言,其设计哲学直接映射了计算机的硬件架构和工作原理。通过学习C语言,开发者能够深入理解程序在内存中的存储方式、CPU的指令执行流程以及操作系统与应用程序的交互机制,这种底层认知是构建高效、可靠软件系统的技术基石。在工程实践中,掌握变量与数据类型、控制流程、函数模块化等基础概念,特别是理解指针与内存管理的本质,是进行系统编程、嵌入式开发和性能优化的关键。本文以C语言入门为切入点,系统讲解从程序结构、编 阅读详情

相关推荐

9、探索肯定语的力量:从历史到现代应用

本文深入探讨了肯定语的历史背景、作用机制及其在现代治疗中的应用,结合具体案例展示了如何通过肯定语和敲击疗法克服负面情绪,帮助个体建立积极的自我形象,提升心理健康。

hadoop5ranger的博客 462

C语言算法和三种基本程序结构

做任何事情都有一定的步骤。为解决一个问题而采取的方法和步骤,就称为算法。 算法是一个基本的概念,但也是一门深奥的学问,小到如何输出九九乘法表,如何对一组数据进行排序,大到如何控制飞行器的姿态,如何让无人机壁障。 这里主要是向大家阐述一下算法的概念,对于初学者,涉及到的算法都很简单,一般不会成为学习的障碍,我们会在后面的实例中逐渐向大家渗透具体的算法。 请大家思考一个问题:如何求1

落尘 3439

MFC下使用C++操作Word文档

由于项目需求,在MFC环境下操作将数据和图片写入word文档,之前没有接触过,网上查阅了很多资料,终于把任务完成。理解的不是很透彻,但是这些东西应该够用了,写篇博客记录一下,以便以后再用到。 (1)VS环境下创建一个MFC应用程序,然后在项目上单击右键,选择 类向导-----添加类----类型库中的MFC类。在弹出的对话框中选择文件,位置选择office安装目录下的...

GIS_yuhua的博客 7577

C语言-分支与循环

C语言之分支与循环前言C语言是一门结构化的程序设计语言,主要分为三种结构:1.顺序结构2.选择结构3.循环结构下面我们主要探讨的是选择结构和循环结构。分支语句和循环语句分支语句ifswitch循环语句whilefordo whilegoto语句问:那什么是语句?C语言中由一个分号(;)隔开的就是一个语句。一、分支语句(选择结构)举个栗子:当你站在学习的分岔口时,你可以选择是否学习,然后当有一天你遇到了改变你命运的机会,那么这个时候:好好学习+机遇=人生巅峰;不好好学习+机遇=回家放羊;这就是选择,我们的每一

cmdos的专栏 501

嵌入式Linux开发:手把手教你调试OV9281摄像头Sensor(基于全志平台DTS配置)

本文详细解析了嵌入式Linux开发中OV9281摄像头Sensor的调试全流程,重点介绍了基于全志平台的DTS配置指南。从硬件信号检测到软件驱动配置,包括设备树关键参数设置、内核驱动适配实战及图像质量调优技巧,为开发者提供了一套完整的调试方案,助力工业视觉和边缘计算设备的开发。

weixin_28716769的博客 371

python docx设置标题中文字体rPr.rFonts.set(qn(‘w:eastAsia‘),u‘黑体‘),报错‘NoneType‘ object has no attribute ‘set‘

一、我的代码: 因为要编一个报告自动化生成的代码,所以用了python docx,在设置标题自己写了一段代码,要求将标题设置成:一级标题 黑体 小四 from docx import Document from docx.oxml.ns import qn from docx.shared import Pt def add_Head(document, level, text, font, size): # document word对象 # level 几级标题 # text 标题内容 # f

qq_40272386的博客 8842

击鼓传花c语言编程题,c语言-第5章 循环程序设计.ppt

《c语言-第5章 循环程序设计.ppt》由会员分享,可在线阅读,更多相关《c语言-第5章 循环程序设计.ppt(83页珍藏版)》请在人人文库网上搜索。1、第5章 循环程序设计,管理学院 电子商务系,2,第5章 循环程序设计,5.1 概述 5.2 while和do while循环 5.3 for循环 5.4 循环的嵌套 5.5 循环的控制 5.6 应用举例 5.7 程序调试,3,第5章 循环程序设计...

weixin_42193786的博客 715

利用Arcgis提取nc数据并计算区域年均温

1.下载数据。2.解压数据至不含中文的路径中。打开工具箱中的多维分析工具-创建NetCDF栅格图层,导入数据。3.打开工具箱中的数据管理工具-图层和表视图-创建栅格图层,导入数据,对输出数据进行命名,得到月均温栅格数据。4.选择工具箱-Spatial Analyst工具(空间分析工具)-地图代数-栅格计算器,计算全国一年年均温。​5.将其导出为.tif格式数据,方便后期使用。6.选择工具箱-Spatial Analyst工具(空间分析工具)-区域分析--以表格显示分区统计,得到分区域的气温数据。

什么都学亿点点的博客 7989

C语言循环结构深度解析:for/while/do-while核心原理与实战应用

循环是编程语言中实现重复执行的核心控制结构,其本质是对重复性任务的自动化抽象。从原理上看,循环通过初始化、条件判断、循环体和更新四个要素,使计算机能够高效处理批量数据。在C语言中,for循环适用于次数明确的场景,while循环适合条件驱动的未知次数循环,而do-while则保证至少执行一次。这些结构的技术价值在于将零散代码组织成可复用的逻辑块,是实现算法(如累加、素数判断、数据搜索)的基础。在应用场景上,循环广泛用于数据处理、游戏逻辑、菜单交互和图形打印等。本文结合浙大翁恺课程体系,深入解析循环的底层机制与

weixin_34389926的博客 408

OpenClaw(原Clawdbot/Moltbot)本地部署快速指南

支持Telegram、Slack、Discord、iMessage等多平台接入,通过配置文件或环境变量填写对应平台的Token,配置后执行。支持对接OpenAI、Anthropic、阿里云百炼等云端模型,也可搭配Ollama使用本地模型。默认仅允许已配对用户交互,群聊场景建议开启Docker沙箱模式,在配置文件设置。执行后跟随指引确认安全说明,进入QuickStart模式,默认网关端口为。可查看已加载模型,通过绑定的通讯通道发送测试指令,响应正常即部署完成。,限制非主会话操作权限,提升安全性。

wukangjupingbb的博客 8474

Windows非分页缓冲池内存泄漏实战:PoolMon与RAMMap高效排查指南

本文详细介绍了Windows系统中非分页缓冲池内存泄漏的实战排查方法。当系统出现卡顿且内存占用异常增长时,通过RAMMap工具快速定位非分页缓冲池异常,并利用PoolMon监控内核内存分配标签,精准锁定泄漏源。文章提供了从确认症状、安装工具到使用findstr命令溯源驱动文件的完整五步排查流程,并总结了常见泄漏标签与解决方案,帮助用户高效解决深层系统内存问题。

weixin_28455801的博客 1008

C语言基础入门:2.4循环控制与实战

循环控制与实战 ——让代码拥有重复执行的力量适用场景:已知循环次数或需要精确控制迭代变量 优势:循环变量自动管理支持多变量控制(C99标准) 2. 循环:条件驱动 适用场景:不确定循环次数,需持续检测条件 典型应用:适用场景:需要先执行操作再检查条件 二、循环控制双雄:break与continue 1. :紧急逃生口 作用:立即终止当前循环 2. :跳过本轮循环 作用:提前结束当前迭代,进入下一轮 对比总结: 优化原理: 输出效果: 四、避坑指南:5个致命错误 死循环陷阱 浮点循环计数器

赵鑫亿的博客 965

描述符链表(Descriptor Chain)是什么?

描述符链表是硬件加速数据传输的核心数据结构,通过链式描述符(包含地址、长度、控制标志等)实现DMA自动批量处理,显著降低CPU负载。其工作原理为:CPU初始化链表后,硬件按序处理每个描述符,完成自动跳转与中断通知。在网卡收包、NVMe存储等场景中应用广泛,优势包括批处理、低延迟和灵活调度。需注意内存对齐、缓存一致性等实现细节,优化手段包括预分配描述符池、环形缓冲区等。该技术是网络/存储领域提升吞吐量的关键方案。

guigenyi的专栏 772

C语言生成n个随机坐标,c语言如何生成随机数 怎样用c语言生成n个随机数?

C语言中如何产生很大的随机数?这个可以一个一个的来生成啊,每次生成一个0-9之前的随机数,然后生成几次 组合起来就可以了。C语言如何连续产生随机数?如果我想用C在1s的时间内连续产生多个随机数,怎么做啊? 产生随机数的方很好解决,用gettickcount 函数 做种子,精确到毫秒。我刚刚用它解决了16毫秒产生65000个不同 随机数丢下一些包袱后,你会惊讶地发现,原来自己可以飞的那么高。谁能告...

weixin_35458961的博客 1513

STM32开发 -- LIS3DH三轴加速度计开发详解

这次要讲一下LIS3DH三轴加速度计的开发使用,之前是有讲过 MPU6050开发 的,但当时是在Linux下做的。额,还是个半成品,哈哈。现在手边有STM32的开发板,可以实实在在的来实现以下卡尔曼滤波了。 一、LIS3DH初识 依照惯例,先看一下手册,大致先了解一下,LIS3DH是什么模块。 下载:LIS3DH datasheet 1、描述 LIS3DH是一款超低功耗高性能三轴线性加速度计,属于...

不积跬步,无以至千里 2万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

一篇吃透 C 语言递归:从入门到避坑,看完就会写

本文介绍了C语言中递归的核心概念与应用。递归通过函数自我调用实现"大事化小"的解题思路,需遵循终止条件和逐步收敛两大铁律。文章通过阶乘计算和数字打印两个经典案例演示递归实现,对比了递归与迭代的优缺点,指出递归适合逻辑清晰但计算量小的问题。同时提供了青蛙跳台阶和汉诺塔两个拓展练习,强调递归思维的关键在于相信函数功能而非纠结展开细节。最后总结递归本质是问题分解,正确使用时能大幅简化代码逻辑。

2502_91954313的博客 989

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

C语言零基础入门-10_循环语句

循环语句的目的是允许我们多次执行一个语句或语句块,而代码只写一次,while, for,do_while

kingsdai的博客 166

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【嵌入式高级开发】For循环——有界重复的工程化表达

for循环的递增表达式在每次迭代后自动执行。无论循环体以何种方式结束(执行到底、continue跳过),递增都会在条件重新判断前运行。这是for相对while的最重要语义保障——它确保即使你使用了continue,循环变量仍会被推进。第二:嵌套循环的计算复杂度是乘积性的。一个N×M的嵌套循环执行N×M次循环体。如果在内层循环中进行代价高昂的操作(如I/O、内存分配),总开销将是外层次数乘以内层开销——这是性能分析中"热点"识别的基础直觉。

VectorShift的博客 94

C语言初学者必备:彻底搞懂分支与循环语句

一、 分支语句:让程序学会“做决定”分支语句通过判断条件的真假来决定执行哪一段代码。

2401_87368394的博客 61

蓝桥杯2024年第十五届省赛真题-拔河(前缀和)

其中一种最优选择方式:队伍 1:{a1, a2, a3},队伍 2:{a4, a5},力量值和分别为 10 + 9 + 8 = 27,12 + 14 = 26,差距为 |27 − 26| = 1。,随后对数组进行排序,然后两两比较求出最小差值,另外为了防止同一编号的人被比较,我们需要另外把i也一起压进去,只有i不相同的才进行比较。i相同肯定会有重复的,i不同当j>i2时,也会有重复的,但是其差值必然是定值,就是选。的队伍的差值的最小值,因此要找连续区间内的和,当然要用前缀和来做。【评测用例规模与约定】

非著名程序员博客 3758

C语言阶段性总结(一)

坦诚,是获取进步的前提。 ——Some one 老实说,对于C语言,我很想把它学好,但在学习的开始,用错了方法,以为读下来就可以,后面才发现,这种不过脑子的学习方式能够带给自己的提升,少之又少。而现在马上就要实验班考核,考核结束之后还有一大堆之前埋下的“坑”等着去填。似乎C语言是时候告一个小小的段落了。 写这篇文章,主要是为了总结一下自己这半年的所学所得,以及经验和教训。 希望下...

axcg77335的博客 344

Rust循环和函数

如果你想要一个函数只在特定的操作系统上工作,那么用 #[cfg(target_os = “xyz”)] 属性来标注它(其中 xyz 可以是 “windows”、“macos”、“linux”、“android”、“freebsd”、“dragonfly”、“bitrig” 或 “openbsd” 中的一个)。每个 Rust 程序的起点都是一个名为 main() 的函数,它可以进一步细分为单独的函数,以便代码重用或更好地组织代码。你可以在代码中自己使用它们,它们被放置在它们要说明的项目(比如一个函数)之前。

cppclub的博客 1376

基于鲁班猫cat1的嵌入式 C语言完全入门教程(三):流程控制——if、switch、循环,写出智能逻辑!

本文介绍了C语言中分支语句和循环语句的用法,包括if、switch、while、do-while、for等基本语法结构,并提供了多个示例代码。主要内容包括:1) 分支语句(if/else、switch)的基本用法和注意事项;2) 循环语句(while、do-while、for)的使用场景和语法;3) 跳转语句(break、continue、goto)的作用和使用建议;4) 两个综合案例(猜数字游戏和斐波那契数列);5) 常见编程陷阱和最佳实践。文章还提供了5个练习题,帮助读者巩固学习内容。

zzjnlwb的专栏 378

c语言输出斐波那契数列pta,从斐波那契数列说起

这段时间在看算法相关的一些东西;因为算法不好连笔试都过不了(哭,其实算法不仅仅是为了笔试面试,更是为了日后在工作中提高软件的运行效率。这让我联想到了前不久看过的一篇文章:李开复:算法的力量以前没有重视算法,现在都要该还回来啦;斐波那契数列今天看到斐波那契数列感觉很有意思; 斐波那契数列:f(0) = 0;f(1) = 1;f(n) = f(n-1) + f(n-2) n>2;嗯,不是很复杂,...

weixin_29218963的博客 982

扫雷小游戏 --基础练习 (C语言实现) -- 详解

本篇通过扫雷小游戏,加强对循环,选择,分支的练习,对于初学者小游戏能提高我们的兴趣,让我们一起操作起来吧!如有错误,请在评论区指正,让我们一起交流,共同进步!

m0_69119792的博客 1115

C语言数组深度解析:从内存布局到工程实践

数组作为计算机科学中最基础的数据结构之一,本质是一段连续的内存空间,用于存储相同类型的元素集合。其核心原理在于通过基地址和偏移量实现元素的随机访问,这背后是编译器将下标操作转换为指针运算的底层机制。理解这一机制的技术价值在于,它使开发者能够精确控制内存布局,从而编写出高效且安全的代码。在实际应用场景中,数组不仅是实现排序、搜索等算法的基石,更是构建字符串、矩阵以及更复杂数据结构(如栈、队列)的基础组件。本文聚焦于C语言中数组与指针的共生关系、内存越界陷阱以及高效排序实践,通过剖析数组名退化、二维数组内存布局

weixin_30522183的博客 681
上一篇: 8. 【C语言】让代码有判断力:分支结构
下一篇: 10. 【C语言】把数据排成队:一维数组
gugucoding
博客等级 码龄140天 7粉丝 102原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值