一起talk C栗子吧(第一百七十六回:C语言实例--字符及字符串输入函数一)

本文介绍了C语言中常用的五个字符和字符串输入函数:fgetc、getc、getchar、gets及fgets的功能与用法。详细解释了每个函数的参数、返回值及注意事项。

各位看官们,大家好,上一回中咱们说的是获取当前终端行数和列数的例子,这一回咱们说的例子是:字符和字符串输入函数。闲话休提,言归正转。让我们一起talk C栗子吧!

看官们,在我们实际的工作中,经常使用字符和字符串。这一回中,我们将介绍如何使用标准库中的函数来输入字符和字符串。

常用的字符和字符串输入函数有五个,下面是它们的函数原型,请大家参考:

      int fgetc(FILE *stream);

       int getc(FILE *stream);

       int getchar(void);

       char *gets(char *s);

       char *fgets(char *s, int size, FILE *stream);

接下来我们分别介绍这些函数的用法:

1.函数fgetc

        int fgetc(FILE *stream);
  • 该函数用来从流中获取字符;
  • 该函数只有一个文件指针类型的参数,它指向一个流;
  • 该函数运行成功时返回从流中获取到的字符,运行失败或者到达流的尾部时返回EOF;

关于该函数的使用,我再做一些补充说明:
该函数用来从其参数所指的流(即stream)中获取一个字符,并且返回获取到的字符,只不过返回的不是字符本身,而是字符转换为int类型后的数值。获取完字符后,该函数会把流内部的位置向前移动一位,以方便再次从流中获取字符。

2.函数getc

       int getc(FILE *stream);

该函数和fgetc函数用法完全相同,只是比fgetc函数健壮一些,可以看作是fgetc函数的替代版本。现在流行各种Plus,因此,我们给该函数起个新名字:fgetc Plus,哈哈。

3.函数getchar

       int getchar(void);
  • 该函数用来从标准输入中获取字符;
  • 该函数没有参数,如果把getc函数的参数设定为stdin,那么它们两个的的用法完全相同;

4.函数gets

          char *gets(char *s); 
  • 该函数用来从标准输入中获取字符串;
  • 该函数只有一个字符指针类型的参数,指针所指的区域用来存放从标准输入流中获取到的字符串;
  • 该函数运行成功时返回获取到的字符串,运行失败或者到达流的尾部时返回空指针;

关于该函数的使用,我再做一些补充说明:
该函数获取字符串时遇到换行符或者到达流的末尾时就停止获取,获取完字符串后,该函数会把流内部的位置向前移动一位,以方便再次从流中获取字符串。

如果流中字符串的长度比参数s指向的区域大,那么会造成缓冲区溢出;如果流中字符串的长度比参数s指向的区域小,那么会获取流中的全部字符,并且在字符串末尾添加小尾巴。

此外,该函数引起的缓冲区溢出可谓是臭名昭著,当我们使用GCC编译包含gets的程序时,GCC会发出以下警告:

 warning: the `gets' function is dangerous and should not be used.

5.函数fgets

       char *fgets(char *s, int size, FILE *stream);
  • 该函数用来从流中获取字符串;
  • 该函数的第一个参数是字符类型的指针,该指针指向的区域用来存放从流中获取到的字符串;
  • 该函数的第二个参数表示每次从流中获取字符串所包含的字符数量,也就是字符串的长度减去一;
  • 该函数的第三个参数是一个文件指针类型的参数,它指向一个流;
  • 该函数运行成功时返回获取到的字符串,运行失败或者到达流的尾部时返回空指针;

关于该函数的使用,我再做一些补充说明:
该函数用来从其参数所指的流(即stream)中获取字符串,并且返回获取到的字符串。获取字符串时遇到换行符或者满足参数设定的字符个数时就停止获取,获取完字符串后,该函数会把流内部的位置向前移动一位,以方便再次从流中获取字符串。

如果流中字符串的长度比第二个参数size的值大,那么只获取size-1个字符到字符串中,剩下的一个字符用来存放空字符,也就是字符串的小尾巴。如果流中字符串的长度比第二个参数size的值小,那么会获取流中的全部字符,并且在字符串末尾添加小尾巴。

该函数可以控制获取字符串的长度,因此可以避免发生缓冲区溢出。可以把该函数看作是gets函数的替代版。

最后我们对这五个字符和字符串输入函数做整体的说明:

  • 1.它们都使用了缓冲技术,也就是说只有按下回车键,才会执行命令(我们在前面章回中介绍过缓冲技术);
  • 2.字符输入函数fgetc,getc和getchar会把回车键读取到缓冲区中,下次再读取字符时读取到的是回车键;
  • 3.字符串输入函数fgets会把回车键读取到字符串中,而gets则不会;

各位看官,关于字符和字符串输入函数的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。


内容概要:本文提出了种基于融合鱼鹰算法和柯西变异的改进麻雀优化算法(OCSSA),用于优化变分模态分解(VMD)的参数,进而结合卷积神经网络(CNN)与双向长短期记忆网络(BiLSTM)构建OCSSA-VMD-CNN-BILSTM模型,实现对轴承故障的高【轴承故障诊断】基于融合鱼鹰和柯西变异的麻雀优化算法OCSSA-VMD-CNN-BILSTM轴承诊断研究【西储大学数据】(Matlab代码实现)精度诊断。研究采用西储大学公开的轴承故障数据集进行实验验证,通过优化VMD的模态数和惩罚因子,有效提升了信号分解的准确性与稳定性,随后利用CNN提取故障特征,BiLSTM捕捉时间序列的深层依赖关系,最终实现故障类型的智能识别。该方法在提升故障诊断精度与鲁棒性方面表现出优越性能。; 适合人群:具备定信号处理、机器学习基础,从事机械故障诊断、智能运维、工业大数据分析等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①解决传统VMD参数依赖人工经验选取的问题,实现参数自适应优化;②提升复杂工况下滚动轴承早期故障的识别准确率;③为智能制造与预测性维护提供可靠的技术支持。; 阅读建议:建议读者结合Matlab代码实现过程,深入理解OCSSA优化机制、VMD信号分解流程以及CNN-BiLSTM网络架构的设计逻辑,重点关注参数优化与故障分类的联动关系,并可通过更换数据集进步验证模型泛化能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

talk_8

真诚赞赏,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值