c语言:scanf前空格的使用场景,getchar()的作用以及它对消除缓存区的作用

C语言输入与混合运算:从scanf缓冲区到序列点的底层原理剖析 在C语言编程中,标准输入输出(I/O)和表达式求值是基础且核心的概念。理解其底层原理,如标准输入缓冲区的工作机制,是处理用户输入、避免数据残留问题的关键。同时,C语言标准对运算符的求值顺序和副作用(Side Effect)有严格规定,特别是在涉及自增、自减等操作时,序列点的概念决定了副作用的生效时机,不当使用会导致未定义行为,严重影响程序的可移植性和确定性。这些原理在计算机考研、嵌入式开发及系统编程中具有重要价值。本文通过一道典型的考研题,深入解析scanf读取数据时的缓冲区交互,以及混合运算中序列点的作用 阅读详情
  1. 对于连续的 scanf,它会在缓冲区留下 '\0'。如果后面再接着一个 scanf,它会吃掉那个 '\0',导致输入功能失效。
  2. 对于这种场景,要用 getchar 去处理。getchar() 的功能是输入读取一个字符,直到’\0’
    scanf
    getchar()
    scanf
    以这样的顺序,就可以消除缓冲区中 '\0' 的影响。
  3. 理清误区:getchar 是输入读取一个字符,不是消除 '\n',只是它的表现效果是这样,不要本末倒置。
  4. while((line[i++]=getchar())!=‘\n’ && i<100)
    这样就可以实现一个一个字符读取的作用。
    5.分析两端代码的标志差别:
    #include<stdio.h>
    #include <ctype.h>
    int main()
    {
    char line[100];
    int len=0,i=0,max=0,end=0;
    int wordflag = 0;
    //读取一行字符存入数组,getchar本身就可以记录,它是读到’\n’才停
    while ( ( line[i++] = getchar() ) != ‘\n’ && i < 100 );
    line[i] = ‘\0’;//getchar是输入读取,到换行的时候停,但是数组本身以’\0’来结尾,所以要手动’\0’
    for(i = 0; line[i] != ‘\0’; i++){
    if (isalpha(line[i]))//这个是分辨是不是字母
    {
    if (!wordflag)
    wordflag = 1;
    len++;
    }
    else
    {
    wordflag = 0;
    if ( max < len )
    {
    max = len;
    end = i;
    }
    len = 0;
    }
    }
    //补上:处理最后一个单词(末尾无分隔符的情况)
    if(wordflag == 1)
    {
    if(max < len)
    {
    max = len;
    end = i;
    }
    }
    //输出最长单词
    for (i = end - max; i < end; i++)
    printf(“%c”, line[i]);
    printf(“\n”);
    return 0;
    }
SAR型ADC的电荷重分配技术解析 本文深入解析了SAR型ADC的核心技术——电荷重分配。通过类比“猜数字”游戏,阐述了其逐次逼近的工作原理,并重点剖析了电容阵列如何实现高速、低功耗的模数转换。文章还探讨了该技术在速度、能效及集成度方面的优势,并指出了电容匹配精度等实际挑战,为嵌入式与物联网设备中的ADC选型与应用提供了实用指南。 阅读详情

相关推荐

Excel转LaTeX表格神器:excel2latex.xla插件使用全攻略(含下载链接与配置教程)

本文详细介绍了Excel转LaTeX表格神器excel2latex.xla插件的完整使用攻略。从下载安装、基础转换到高级配置,深入讲解了如何利用该插件高效生成LaTeX代码,特别针对IEEE双栏等复杂排版需求提供了专业解决方案,帮助用户彻底告别手动编码,提升学术与专业文档的排版效率。

app77的博客 296

掌握C语言输入技巧:getchar()函数消除回车符困扰

通过掌握这些消除回车符困扰的技巧,你可以在C语言编程中更自信地处理输入流。无论你选择使用哪种方法,了解回车符如何影响输入流将有助于你编写更可靠、更健壮的代码。让我们一起摆脱回车符的魔咒,创造出更出色的程序吧!

laterstage的博客 5227

ETL基础概念及要求详解

ETL即Extract(抽取)Transform(转换)Load(装载)的过程,如下图,同时也包括数据清洗的部分,是数据从源端到目标端的一个数据处理的过程,是构建数据仓库的重要一环,但不局限于构建数据仓库其他BI(商业智能)的设计和开发数据分析平台也经常用到ETL。

qq_43605229的博客 8947

scanf,getchar,gets知识详解

scanf,getchar,gets比较通俗易懂版

2401_83603768的博客 1350

STM32Cubemx-H7-17-麦克纳姆轮驱动

我们先看.h,知道哪些函数会有哪些功能和宏定义参数首先 是在.h的宏定义处定义引脚编号,比如tb6612控制方向的引脚,以及设定了哪个定时器作为pwm输出,还有编码计次的中断引脚/* 硬件相关宏定义 *//*1 前进方向往上 42 3*/// TB6612 方向引脚定义/* 定时器相关宏定义 *//* 编码器相关宏定义 */把自己的引脚根据原理图填对应,方向引脚也是,如果发现反转就把对应的引脚定义反过来,编码也是,编码我们用一个引脚就好,都在cubemx配置好。

m0_74211379的博客 1423

【python科研数据处理】将Endnote自动搜索的所有pdf文件,全都移动指定文件夹中

将Endnote自动搜索到的全部pdf文件,全都移动指定文件夹中1 背景2 问题解决 手动反爬虫,禁止转载:原博地址 https://blog.youkuaiyun.com/lys_828/article/details/122370892(优快云博主:Be_melting) 知识梳理不易,请尊重劳动成果,文章仅发布在优快云网站上,在其他网站看到该博文均属于未经作者授权的恶意爬取信息 1 背景 在进行期末考试周后,面对最后一门功课,需要提交至少80篇SCI参考文献,因此最快下载文献的方式就是通过Web of S

lys_828的博客 1827

第四章 C语言输入输出_C语言清空(刷新)缓冲区,从根本上消除那些奇怪的行为

缓冲区的优点很明显,它加快了程序的运行速度,减少了硬件的读写次数,让整个计算机变得流畅起来;但是,缓冲区也带来了一些负面影响,经过前面几节的学习相信读者也见识到了。 那么,该如何消除这些负面影响呢?思路其实也很简单,在输入输出之前清空(刷新)缓冲区即可: 对于输出操作,清空缓冲区会使得缓冲区中的所有数据立即显示到屏幕上;很明显,这些数据没有地方存放了,只能输出了。 对于输入操作,清空缓冲区就是丢弃残留字符,让程序直接等待用户输入,避免引发奇怪的行为。 本节的代码用到了一些暂时没有学到的知识,估计很多初学

qq_43205256的博客 3873

华为OD机试真题 新系统2026-04-01 C++ 实现【勇攀数字高峰】

请你在给定的数字地形图中寻找登山路径,数字代表当前位置的海拔高度,要求从最低海拔出发,不断攀登,最终到达最高山峰。你需要寻找所有满足条件的登山路径。地图已经保证最低海拔和最高山峰都只有一个。

MISAYAONE的博客 384

C语言学习之路--浅谈函数getchar()与putchar()

getchar()与putchar()的简单用法。

m0_62561961的博客 407

打破RK3588 GPIO中断响应延迟的枷锁,开启高效编程

本文针对RK3588芯片在智能安防和工业自动化应用中出现的GPIO中断响应延迟问题展开深入分析。通过硬件原理剖析,发现延迟主要源于中断控制器优先级设置、线路干扰等硬件因素,以及中断处理函数复杂、内核调度延迟等软件问题。提出硬件优化方案包括合理布局布线、电源稳定设计,软件层面则通过精准配置设备树、精简中断处理函数、利用工作队列等内核机制进行优化。测试结果显示,优化后中断响应延迟从50-80ms降至10-20ms,高负载下也能稳定在50ms以内。文章最后展望了AI技术在中断调度中的潜在应用价值。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 364

AttributeError: module ‘lib‘ has no attribute ‘X509_V_FLAG_CB_ISSUER_CHECK‘解决方案

本文主要介绍了AttributeError: module ‘lib’ has no attribute 'X509_V_FLAG_CB_ISSUER_CHECK’解决方案,希望能对使用python的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 5万+

c语言清除缓冲区的作用,C语言清除scanf()缓存的案例讲解

又重新过一遍C语言,感觉每次重学C语言都有不同的感受,遇到了一个问题,就是scanf()这个问题,其实细究起来,也有很多可以值得深挖的,实际上每次细细的挖掘的话,都是对C语言的更透彻的认识.那么下面我就对scanf()中清除输入缓冲区的方法讲解:应用场景:我们使用多个scanf()的时候,如果输入缓冲区还有数据的话,那么scanf()就不会询问用户输入,而是直接就将输入缓冲区的内容拿出来用了,这就...

weixin_28819153的博客 1138

petalinux2022.2启动文件编译配置

petalinux2021之前的版本里,导入目录components/yocto/下的“environment-setup-aarch64-xilinx-linux” 和 “layers/core/oe-init-build-env”的环境,能使用Yocto的devtool工具。(加入下面内容,先petalinux-build下载完成后才能有源码)制作 BOOT.BIN 启动文件:petalinux-package --boot --fsbl --fpga --u-boot --force。

wangjie36的博客 1401

C/C++输入机制解析——scanf,cin,getchar,geiline等详解

C/C++的输入依赖缓冲区机制,当我们在键盘输入一串字符时,计算机发生了以下事件:计算机操作系统将你输入的数据放进输入缓冲区程序调用scanf或cin时,从缓冲区取出数据写入变量的内容空间。

wqw2682611C的博客 795

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C语言输入安全:从scanf到scanf_s的缓冲区溢出防护与跨平台实践

缓冲区溢出是C语言编程中常见的安全漏洞,尤其在处理用户输入时,传统的scanf函数由于缺乏边界检查,容易导致内存越界写入。为了解决这一问题,C11标准引入了安全函数扩展,要求为字符串输入操作提供缓冲区大小参数,从而在运行时防止溢出。这种安全机制在工程实践中能有效提升程序的健壮性,特别是在处理不可信输入源的场景下。本文以scanf_s为例,深入探讨其实现原理、与标准scanf的行为差异,并结合跨平台开发需求,分析在Windows、Linux等不同编译环境下的兼容性策略与最佳实践选择。

weixin_34337381的博客 400

Devexpress16.2.6破解工具

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

简单讲解c语言中各个输入输出函数使用场景与不同,填补你的知识盲区

简单讲解c语言中各个输入输出函数使用场景与不同,填补你的知识盲区,使你轻松掌握各个输入输出函数

just_hyx的博客 1229

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

C语言中用getchar和putchar函数读/写字符

其次,使用getchar函数时,因为其返回值是读入的字符,所以我们可以应用在多种不同的C语言惯用法上,也优于scanf。第一个原因是:这两个函数比scanf和printf函数简单的多,因为scanf函数和printf函数式设计用来按不同的格式读/写多种不同数据类型的。其中有一点需要注意的是,用getchar读取一个字符并回车时,换行符会被读取。所以,使用时,我们需要还将getchar的返回值存储在变量中,以用以保存。第二个原因是:通常putchar函数是作为宏来实现的,以此获得额外的速度提升。

dewn_k的博客 706

【C语言】循环语句while

【C语言】循环语句while

weixin_63060867的博客 5188

C语言二维字符数组安全输入:scanf/fgets/gets原理与避坑指南

二维字符数组是C语言中存储多字符串的基础结构,其输入本质涉及缓冲区管理、内存安全与标准I/O行为。scanf按空白符分割且不校验长度,易引发缓冲区溢出;gets因无长度限制已被C11标准移除;fgets通过显式大小参数实现有界行读取,是安全输入的核心方案。理解三者在内存操作、终止条件和边界处理上的根本差异,是避免段错误、数据错乱和安全漏洞的关键。本文聚焦二维数组场景,解析输入函数底层机制,提供可直接复用的加固模板、错误排查路径及工程化封装实践,覆盖初学者常见崩溃、跳过输入、乱码等典型问题。

weixin_34269583的博客 407

C语言学习DAY04

本章介绍了分支语句(if 和switch)、循环语句(while、for 和do while)的用法,以及continue和break的区别以及在各语句使用中体现的效果,以及用getchar函数来清楚输入缓冲区

2301_82004288的博客 1832

VS2022中scanf报错全解析:从C4996到缓冲区溢出的解决方案

在C/C++编程中,输入输出是基础且关键的操作,而标准输入函数scanf则是初学者最先接触的核心函数之一。其工作原理是通过格式字符串解析用户输入,并将数据存储到指定变量中。然而,由于传统scanf函数在设计上缺乏边界检查机制,容易引发缓冲区溢出等安全漏洞,这正是现代编译器如Visual Studio 2022默认将其标记为不安全的原因。从技术价值角度看,安全编程已成为工业级开发的必备要求,编译器通过报错强制开发者采用更安全的替代方案。在实际应用场景中,尤其是在教学与工程实践的交叉领域,这种安全标准与教材传统

weixin_33744854的博客 415

scanf、gets、getchar、cin、cin.get、cin.getline、getline总结

一、scanf scanf一般可用于读取数字、字符、字符串; 结论: (1)当 scanf 从缓冲区中读取单个字符时,若缓冲区中第一个字符是空格、tab或换行这些分隔符时,scanf 不会将其忽略,会读取并清除。 (2)当 scanf 从缓冲区中读取数字或字符串时,若缓冲区中第一个字符是空格、tab或换行这些分隔符时,scanf 会将其忽略并清除,继续读取下一个字符,若缓冲区为空

Ryfdoudou的博客 535

VS中scanf报错的4种解决方案与原理剖析

scanf是C语言标准输入函数,其潜在缓冲区溢出风险引发编译器安全检查机制。微软VC++通过SDL策略在编译阶段拦截不安全函数调用,本质是对C运行时库(CRT)的安全增强。该机制并非语法错误,而是编译器级防护策略,涉及_CRT_SECURE_NO_WARNINGS宏、scanf_s扩展、#pragma警告控制及跨平台编译器切换等关键技术路径。在教学实践、Windows桌面开发、嵌入式仿真及开源跨平台项目中,需结合安全需求与兼容性权衡方案选择。本文聚焦Visual Studio环境下scanf红波浪线问题,详

weixin_34186128的博客 347

C语言清空输入缓冲区的N种方法对比

C语言中有几个基本输入函数: //获取字符系列int fgetc(FILE *stream);int getc(FILE *stream);int getchar(void);//获取行系列char

linjcai的博客 368

适合新手的C语言基础知识整理(三)—— 输入输出函数

格式:putchar(c);c为字符常量,变量或者表达式。

2201_75647417的博客 207

【C语言】关于我回头学的那些输入输出等(四)

我的第一门语言就是C,但是学艺不精,中途跑去学了C#和Java后,感觉到了C的重要性,毕竟是最接近底层的语言,又跑回来学C。毕竟前两门的控制语句,变量什么的都是类似的,回到C后只需要学习一些特定C的语法,比如宏,预编译指令等等,这些对我来说都是陌生的词汇。所以边学边记录一下以前的知识。

https://blog.youkuaiyun.com/qFAFAF 747
上一篇: C语言动态内存 + 柔性数组 + 数组名退化
下一篇: C语言数组章节 题型整理
Code_Solitude
博客等级 码龄116天 1粉丝 76原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值