gets函数,C语言gets函数详解

2023-11-06

gets函数,C语言gets函数详解

在前面从键盘输入字符串是使用 scanf 和 %s。其实还有更简单的方法,即使用 gets() 函数。该函数的原型为:

# include <stdio.h>
char *gets(char *str);

这个函数很简单,只有一个参数。参数类型为 char* 型,即 str 可以是一个字符指针变量名,也可以是一个字符数组名。

gets() 函数的功能是从输入缓冲区中读取一个字符串存储到字符指针变量 str 所指向的内存空间。

下面将前面中使用 scanf 输入字符串的程序改一下:

# include <stdio.h>
int main(void)
{
    char str[20] = "\0";  //字符数组初始化\0
    printf("请输入字符串:");
    gets(str);
    printf("%s\n", str);
    return 0;
}

输出结果是:
请输入字符串:i love you
i love you

可见,gets() 函数不仅比 scanf 简洁,而且,就算输入的字符串中有空格也可以直接输入,不用像 scanf 那样要定义多个字符数组。也就是说:

gets(str);

完全可以取代:

scanf("%s", string);

不仅代码更简洁,而且可以直接输入带空格的字符串。同样,前面章节中,对字符指针变量所指向的内存单元进行初始化也可以用 gets(),下面将那个程序也改一下,将 scanf 换成 gets():

# include <stdio.h>
int main(void)
{
    char str[30];
    char *string = str;  //一定要先将指针变量初始化
    printf("请输入字符串:");
    gets(string);  //也可以写成gets(str);
    printf("%s\n", string);  //输出参数是已经定义好的“指针变量名”
    return 0;
}

输出结果是:
请输入字符串:Hi i…like you
Hi i…like you

此外,关于使用 gets() 函数需要注意:使用 gets() 时,系统会将最后“敲”的换行符从缓冲区中取出来,然后丢弃,所以缓冲区中不会遗留换行符。这就意味着,如果前面使用过 gets(),而后面又要从键盘给字符变量赋值的话就不需要吸收回车清空缓冲区了,因为缓冲区的回车已经被 gets() 取出来扔掉了。下面写一个程序验证一下:

# include <stdio.h>
int main(void)
{
    char str[30];
    char ch;
    printf("请输入字符串:");
    gets(str);
    printf("%s\n", str);
    scanf("%c", &ch);
    printf("ch = %c\n", ch);
    return 0;
}

输出结果是:
请输入字符串:i love you
i love you
Y
ch = Y

我们看到,没有清空缓冲区照样可以输入’Y’,因为 gets() 已经将缓冲区中的回车取出来丢掉了。如果前面使用的不是 gets() 而是 scanf,那么通过键盘给 ch 赋值前就必须先使用 getchar() 清空缓冲区。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gets函数,C语言gets函数详解 的相关文章

  • TLB的作用与机制

    TLB Translation Lookaside Buffer 转换检测缓冲区 是用来帮助CPU中的MMU进行地址转换的 在可分页系统中 每个进程都有自己虚拟地址空间和虚拟页面 当CPU执行进程代码读到虚拟地址时 不是直接将该虚拟地址送到
  • 泰勒图(Taylor diagram)绘制方法大汇总

    泰勒图 Taylor diagram 的基本介绍 R 绘制泰勒图 Taylor diagram Python 绘制泰勒图 Taylor diagram 泰勒图 Taylor diagram 的基本介绍 泰勒图 Taylor diagram
  • GEO2R数据下载速度慢、基因注释、差异分析、火山图、热图及后续处理

    GEO2R数据分析 首先感谢生信技能树大神jmzeng1314提供的github包 由于我这边访问github比较困难 因此我已经导入到我的 gitee 托管平台 https gitee com swcyo 特别声明 正版托管地址是http
  • java 工具类实现驼峰和下划线的互相转换

    下划线转驼峰 如果是下划线转驼峰 那么ch就是 public static String toCamel String str String ch if str indexOf ch 1 return str String strings
  • Git下载安装及常用命令

    背景 Git是一个开源的分布式版本控制系统 可以有效 高速的处理从很小到非常大的项目版本管理 安装 在你开始使用 Git 前 需要将它安装在你的计算机上 即便已经安装 最好将它升级到最新的版本 你可以通过软件包或者其它安装程序来安装 或者下
  • shu_1241 邮局位置问题

    http 202 121 199 212 JudgeOnline problem php cid 1078 pid 5 分析 由于题目中的距离是折线距离 所以能够分别考虑两个方向 又x方向与y方向实质是一样的 所以以下 用x方向来分析 如图
  • Linux系统vi命令快捷键汇总

    vi的基本概念 基本上vi可以分为三种状态 分别是命令模式 command mode 插入模式 Insert mode 和底行模式 last line mode 各模式的功能区分如下 命令行模式command mode 控制屏幕光标的移动
  • Linux系统网络启动失败

    nm object get property Error getting State for org freedesktop NetworkManager ActiveConnection Linux系统网络启动失败 出错原因 用图形用户界
  • Java期末作业-社区医疗信息管理系统(源码+数据库文件+设计报告·附下载链接)

    Java期末大作业 社区医疗信息管理系统介绍 比较简单 点我下载项目源码 数据库文件 设计报告文档 介绍 这个小项目没有用到任何框架也没有用到Javaweb的技术 知识使用了Java写代码 使用MySQL创建数据库 然后用JDBC进行连接
  • 什么是信道编码?信道编码比较

    消除干扰 让无线信号更干净 这本是信道编码技术的初衷 然而 最近网络上这场 Polar码投票 闹剧 无中生有地添加杂质 与所议论的技术之本质背道而驰 若Polar码也有血肉之躯 此君情何以堪 香农前辈若在世 也会笑话我们吧 2016年11月
  • 1.NoSQL数据库简介

    1 1技术发展 技术的分类 1 解决功能性的问题 Java Jsp RDBMS Tomcat HTML Linux JDBC SVN 2 解决扩展性的问题 Struts Spring SpringMVC Hibernate Mybatis
  • 服务器的作用

    服务器的作用 1 服务器就好像是一个电话总台一样 而其他的网络设备就像是公共电话 所有的数据传输都要经过服务器的处理 2 服务器作为一个网络节点 为用户提供数据处理服务 最常见的就是使用服务器为自己搭建一个网站 3 服务器运算能力强 可以长
  • Babel安装步骤(JavaScript编译器)

    首先需要安装node js按照官网 下一步 就行 1 npm init 初始化 2 安装依赖包 npm install save dev babel core babel cli 如果说提示babel不是命令 可以全局安装npm insta
  • 05-windows下SQL Developer连接Orcale

    1 使用orcale安装时候自带的工具SQL Developer 工具位置 连接 连接成功
  • 【React 进阶】props 和 state 的区别详解

    时隔一年半之久再次重新学习 React 好多都还是原来的样子 这次我要重新开启 React 的大门 希望各位小伙伴可以一起讨论学习呦 前言 今天我们开始第一个专题 React 中 关于 props 和 state 当然我们不是对 props
  • 【React】19课 react组件使用redux小案例

    小案例效果入下 我们来看一下文件的目录结构 redux文件内的index js文件代码 const add Num 增加一条数据 const remove Num 删除一条数据 state 数据原先的状态 action 需要来进行改造的内容
  • using namespace std啥意思?命名空间?

    using 是C 中的关键字 命名空间作用域参考 两种形式 using 命名空间名 标识符名 将指定的标识符暴露在当前的作用域内 使得在当前作用域可以直接引用该标识符 using namespace 命名空间名 将指定命名空间内的所有标识符
  • 默纳克调试说明书_默纳克_NICE3000调试说明书(修改版)

    4 2 4 密码设置 为了更有效地进行参数保护 NICE3000电梯一体化控制器提供了密码保护 下面示例将密码改为12345的过程 粗体表示闪烁位 图4 9 密码的设定过程 设置了用户密码 即用户密码FP 00的参数不为0 会先进入用户密码

随机推荐

  • Selenium被检测为爬虫,怎么屏蔽和绕过

    01 Selenium 操作被屏蔽 使用selenium自动化网页时 有一定的概率会被目标网站识别 一旦被检测到 目标网站会拦截该客户端做出的网页操作 比如淘宝和大众点评的登录页 当手工打开浏览器 输入用户名和密码时 是能正常进入首页的 但
  • DNS查询服务器的基本流程

    DNS查询服务器的基本流程 假定域名为m xyz com的主机想知道另一台主机 域名为y abc com 的IP地址 例如 主机m xyz com打算发邮件给y abc com 此时 必须知道主机y abc com的IP地址 主机m xyz
  • 因果推理(九):双重差分(Difference-in-Differences)

    1 预备知识 回顾一下第二章的 unconfoundedness 假设 无混杂假设等价于 T T T到 Y Y Y之间没有畅通无阻的后门路径 在这种情况下 关联就是因果 那么可以用下面的式子计算ATE
  • 【编译原理】第1章 引论

    1 引论 目录 一 基本概念 二 编译过程 三 PL 0编译程序 题目练习 拓展 高级程序语言 参数传递 一 基本概念 源语言程序 源语言编写的程序 源语言一般指的是编写源程序所用的语言 它必须翻译成机器语言才能在计算机中使用 目标语言程序
  • linux下显卡驱动掉了,出现The system is running in low-graphics mode时解决方法

    Ctrl alt F1 cd etc X11 sudo cp xorg conf failsafe xorg conf sudo reboot 重启会发现linux很卡 原因是显卡驱动有问题 Ctrl alt F1 sudo service
  • Android 10如何隐藏应用图标

    隐藏应用图标这个功能应该用的很少 毕竟用到这个功能的应用可想而之 手动滑稽 隐藏图标的实现方式我想在网上查到很多了有在AndroidManifest实现的也用通过如下代码实现的 启动组件 param componentName 组件名 pr
  • 2.处理器与设备间数据交换方式

    处理器与外设之间传输数据的控制方式通常有3种 查询方式 中断方式和直接内存存取 DMA 方式 21 查询方式 设备驱动程序通过设备的I O端口空间 以及存储器空间完成数据的交换 例如 网卡一般将自己的内部寄存器映射为设备的I O端口 而显示
  • ASPXGridView使用总结

    转载 一 ASPXGridView外观显示 属性 Caption 列的标题 KeyFieldName 数据库字段 SEOFriendly 是否启用搜索引擎优化 Summary 指定分页汇总信息的格式 Setting节点的ShowFilter
  • 如何将小程序放到公众号菜单?

    第一步 公众号关联小程序 注 小程序要放到公众号菜单需要先把小程序与公众号关联 如果已经关联了可以直接下一步操作 1 到微信公众平台 登录小程序账号 进入设置 gt 开发设置 即可得到小程序AppID 将其复制下来 获取小程序AppID 2
  • chinaUnix中的linux源代码学习

    原文地址 http bbs chinaunix net thread 1930079 1 1 html 大家好 内核源码版对本版块的精华帖进行了分类汇总 所有的精华帖分为十大类 各个分类的精华帖相关信息分布在该贴2 11楼 每个分类各占1楼
  • AXI总线学习小结

    1 AXI总线结构 AXI总线由5个通道构成 通道名称 通道功能 数据流向 read address 读地址通道 主机 gt 从机 read data 读数据通道 包括数据通道和读响应通道 从机 gt 主机 write address 写地
  • SQL中的连接

    一 表连接 SQL提供了多种类型的连接方式 它们之间的区别在于 从相互交叠的不同数据集合中选择用于连接的行时所采用的方法不同 连接类型 定义 内连接 只连接匹配的行 左外连接 包含左边表的全部行 不管右边的表中是否存在与它们匹配 的行 以及
  • 个人网站搭建 01——Linux 安装宝塔面板

    宝塔面板概念 官网 https www bt cn new index html 安全高效的服务器运维面板 使用宝塔前 手工输入命令安装各类软件 操作起来费时费力并且容易出错 而且需要记住很多 Linux 的命令 非常复杂 使用宝塔后 2
  • python cv实现二值化区域检测

    功能 检测图像中最大的矩形区域 代码实现 import cv2 import numpy as np imgpath test1 jpeg img cv2 imread imgpath gray cv2 cvtColor img cv2 C
  • maven创建自定义web工程模板

    一 先搭建好一个项目模板 这里推荐两种方式 更推荐第一种 第一种 maven创建web工程 使用模板方式 二 第二种 maven创建web工程不用模板 手动创建 一 注意每个文件夹下都放一个文件占位 否则创建模板时会认为是空目录不进行创建
  • 5分钟了解AI算法 之 隐式马尔可夫模型(Hidden Markov Model)

    一 隐式马尔可夫模型 简介 Hidden Markov Model 在之前的文章中已经介绍了马尔可夫链 马尔可夫模型与马尔可夫链的区别在于 隐马尔科夫模型多了一条不可见的时序状态 通过对该模型各参数的推导即可解决当前AI领域比较常见的三大基
  • 进程间通信(二)/共享内存

    前言 在前面的博文中分析了什么的进程间通信和进程间通信的方式之一 管道 匿名管道和命名管道 接下来分析第二种方式 共享内存 要实现进程间通信 其前提是让不同进程之间看到同一份资源 所谓共享内存 那就是不同进程之间 可以看到内存中同一块资源
  • Tigase开发笔记5:如何自定义插件 Plugin

    其他博客比较好的介绍推荐 http my oschina net greki blog 209726 1 定义一个插件 四种处理器插件接口 第一步 预处理 XMPPPreprocessorIfc 这是预处理器插件需要实现的接口 第二步 处理
  • Centos7扩容根分区(LVM+非LVM)

    Centos7扩容根分区 LVM 非LVM 为什么要扩容根分区 自然是系统空间不足 还有就是部署的时候只顾头不顾腚的操作 以及服务器每天都要产生大量日志 日益壮大的数据 等各种后期需求 学会扩容根分区是很有必要的 昨天踩的坑 今天把它们都记
  • gets函数,C语言gets函数详解

    gets函数 C语言gets函数详解 在前面从键盘输入字符串是使用 scanf 和 s 其实还有更简单的方法 即使用 gets 函数 该函数的原型为 include