字符串输入的2种常用方法详解

  • 一.scanf函数
    • 1.扫描集
    • 2.逆向使用扫描集
  • 二.gets函数

一.scanf函数

int main()
{char arr[50] = { 0 };scanf("%s", arr);printf("%s", arr);return 0;
}

这种方法可以输入字符串,但是只能输入一个词,遇到空格就结束了。,空格之后的字符,会留在缓冲区,等待下次读入。

如果我们要使用scanf函数来输入的话,有没有办法呢?
答案:有的。

1.扫描集

除了转换修饰符 s 以外,也可以使用“扫描集”(scanset)修饰符来读取字符串它由方括号所包含的一串无序字符组成([scanset])。scanf()函数接着读取所有字符,然后将它们存储为一个字符串(带有字符串终止符),直到遇到不匹配扫描集中任一字符时才停止。

int main()
{char arr[50] = { 0 };scanf("%[123456789]", arr);printf("%s", arr);return 0;
}

此时我们会发现一个问题,就是扫描集只能识别扫描集里面的字符。
不过没关系,我们只需要改动一点点就行,这样不行的话,我们就反着来。

2.逆向使用扫描集

逆向使用转换扫描集(也就是说,除扫描集中的字符外,其他都符合),做法是在扫描集的左括号后面加上一个插入号(^)。

int main()
{char arr[50] = { 0 };// \n是按下回车后输入的,[^\n] 的意思是 除了\n之外的字符scanf("%[^\n]", arr); //字符串末尾有\0printf("%s", arr);return 0;
}

使用scanf时,最后的\n(按下回车时输入的)会遗留在缓冲区中,如果使用scanf,则需要使用gerchar()将缓冲区的Enter吃掉

二.gets函数

 char arr[50] = { 0 };gets(arr);  //末尾有\0puts(arr);


使用 gets() 时,系统会将最后“敲”(Enter)的换行符从缓冲区中取出来,然后丢弃,所以缓冲区中不会遗留换行符

总结:
1 .我个人认为使用gets()函数比较方便,同时缓冲区中还不会遗留数据。
2.如果要使用scanf()函数,那么使用逆行扫描集会好很多,同时也需要注意缓冲区中的\n

字符串输入的2种常用方法详解相关推荐

  1. python输入字符串并反序result_python字符串反转的四种方法详解

    python字符串反转的四种方法详解 这篇文章主要介绍了python字符串反转的四种详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.用red ...

  2. 字符串反转python_python字符串反转的四种方法详解

    这篇文章主要介绍了python字符串反转的四种详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.用reduce函数方法 book = 'Pyt ...

  3. 字符串拼接的四种方式详解,代码测试

    字符串拼接的四种方式 1. 使用+ 号进行字符串拼接 2. concat() 方法 3 .StringBuffer(线程安全,效率没有 StringBuilder 高) 4. StringBuilde ...

  4. 站长在线Python精讲:在Python中格式化字符串的两种方法详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python中格式化字符串的两种方法详解>.本知识点主要内容有:使用%操作符格式化字符串和使用format()方法格式化字 ...

  5. Spark SQL原理及常用方法详解(二)

    Spark SQL 一.Spark SQL基础知识 1.Spark SQL简介 (1)简单介绍 (2)Datasets & DataFrames (3)Spark SQL架构 (4)Spark ...

  6. java构造和解析json_Java构造和解析Json数据的两种方法详解一

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...

  7. java json解析 代码_Java构造和解析Json数据的两种方法详解一

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...

  8. Java构造和解析Json数据的两种方法详解一

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...

  9. 并发编程-04线程安全性之原子性Atomic包的4种类型详解

    文章目录 线程安全性文章索引 脑图 概述 原子更新基本类型 Demo AtomicBoolean 场景举例 原子更新数组 Demo 原子更新引用类型 Demo 原子更新字段类型 使用注意事项: Dem ...

最新文章

  1. 学界 | DeepMind论文解读:通过删除神经元来了解深度学习
  2. C陷阱与缺陷的学习笔记
  3. 因女友的一句话,他做了个10亿美元的App!网友评:万事俱备,就差个女友了~...
  4. python教程是用什么博客写的-Python 有哪些好的学习资料或者博客?
  5. 安卓期末作品小项目_每日一个财务小知识——洞悉洞晰财务报告第一季
  6. Android 实用开源控件
  7. flexjava通信错误之一:Server.resource.unavailable
  8. ArcGIS实验教程——实验四十一:ArcGIS区域分析统计直方图(土地利用--坡度分级柱状统计图的制作)
  9. Java架构-面试怎么谈薪资——让自己的利益最大化
  10. 【tfcoreml】tensorflow向CoreML模型的转换工具封装
  11. 【AI专利】中国成为全球AI专利第二大提交国,微软AI专利数比你论文字数都多...
  12. php 修改图像大小,php 修改图片大小
  13. RAID组中的“Foreign”状态磁盘
  14. 计算机游戏制作英文要学好吗,有关怎么不沉迷于电脑游戏的英语作文你的同学MICHAEL沉迷于电脑游戏中,影响了学习.作为好朋友,你要怎么帮助他?写一篇80词左右的英语作文....
  15. 图像处理——基于纹理分类的LBP算法及matlab+python算法实现
  16. EDA技术及应用实验2 or2a程序
  17. 详细介绍idm下载以及配置,实现百度网盘急速下载不是梦,适合新手
  18. 安卓平板倍速_推荐:安卓上本地音频播放器,可实现5秒快进快退和倍速播放...
  19. jmeter 打开报错_Jmeter-打开jmx文件报错
  20. zabbix的psk加密结合zabbix_get取值

热门文章

  1. UG NX 三维PMI标注培训
  2. 魔方最快速识别六面颜色
  3. 如何解决下载链接在微信中无法打开的问题
  4. SPAMS Matlab 安装
  5. KBL410-ASEMI适配高端电源整流桥
  6. ZYNQ裸板:DDR篇
  7. 员工试用期转正申请书(泸州老窖)
  8. 点击highcharts下钻柱状图更改其他柱子图
  9. 7-7 超级玛丽 (10 分)
  10. 认识jQuery的Promise