1.getsc( )函数将接收整个字符串直到回车为止。
2.scanf()函数相比gets()函数输入字符串存在一个问题,那就是输了空格之后会认为输入字符串结束,空格后字符将作为下一个输入项处理。
当然了,对于scanf也可以处理这问题。可以加入%【】,【】内可以加^任意字符(eof)来结束
字符串的输入如%【^eof】就是直到有eof输入才表示输入字符串终止。
3对于scanf的缓冲区问题
3-1 问题产生的原因:
对于函数体内连续执行两次scanf函数:
例如scanf("%c",&c);
scanf("%c",&b);
输入时我们输入字符’a’,'a’被c读取,之后回车结束,但是问题就来了,回车会转变成‘\n’符留在缓冲区内,下一句scanf函数读取字符时,即便你输入了新的字符,先读取的还是缓冲区内的‘\n’。
这是因为一般情况下,如果你使用从输入流缓冲区中读取数据的函数(scanf或者getchar),系统就会把从键盘输入的字符优先放入缓冲队列(注意,别误会,不管有没有使用从输入流读取数据的函数,系统都会把数据先输入到缓冲区,这里只是为了强调不是直接从stdin键盘缓冲区读取),直到键入回车键或者是遇到文件结束符EOF时,再从输入缓冲区逐个读取字符。
正因为如此下一句输入的字符放入输入流缓冲区(缓冲队列),这个字符前还有上一次的‘\n’,对于队列这种结构,特点是先进先出,那么
输入结束从从输入缓冲区读取字符读取的自然就是‘\n’,输入的数据则还是放在缓冲区中,以便下一次读取。
注意对于getchar也有上述问题(两个getchar连用)
3-2问题解决:
1.方法一:
scanf与getchar搭配使用
例如:scanf("%c",&a);
getchar();
2.方法二:
刷新缓冲队列:
fflush(stdin);
//这种方法在LINUX下无效,window下有效的。

scanf与gets的区分相关推荐

  1. 记录一个scanf很容易出错的问题:scanf(“%.1f“)错误,区分精度和域宽

    很多朋友写代码的时候,常常会遇到这样的一个问题: scanf("%.1f"): 我们都知道,在printf时,可以设置输出的精度,但是scanf是不能设置精度的,也就是不能出现任何 ...

  2. C++学习(三)(C语言部分)之 基本数据类型

    基本数据类型 上期回顾 stdlib.h system,命令 release MT 导入ico文件 基本数据类型 整数 int 浮点型(小数 实型) float double 字符型 char 变量 ...

  3. 输入一串字符串,将其中的大写字母换成小写,小写字母换成大写输出。

    题目: 输入一串字符串,将其中的大写字母换成小写,小写字母换成大写输出.例如输入abdAd,输出ABDaD. 分析: 题目的关键在于大小写的转换问题,ASCII字符编码的了解和转换问题. 对于ASCI ...

  4. C语言scanf函数详解

    函数名: scanf  功 能: 运行格式化输入  用 法: int scanf(char *format[,argument,...]); scanf()函数是通用终端格式化输入函数,它从标准输入设 ...

  5. 解决VS2013或2017中类似于:error C4996: 'scanf': This function or variable may be unsafe的问题

    用惯了之前的scanf()函数,突然要用scanf_s()函数多多少少有点不习惯,所以在这里给大家介绍一下scanf_s的用法或好处吧! 1.scanf_s函数格式控制字符串中除了格式声明之外,如果有 ...

  6. php可以用scanf,C/C++中 使用scanf和printf如何读入输出double型数据。

    黄舟2017-04-17 13:47:232楼 注意scanf函数和printf函数是不同寻常的函数,因为它们都没有将函数的参数限制为固定数量.scanf函数和printf函数又可变长度的参数列表.当 ...

  7. hun 暑期实训之打牌 cin与scanf的输入

    文章目录 题目 思路 AC代码 关于cin与scanf的输入问题 题目 思路 就不断模拟就好了.用一个map存每个字符对应的个数.对于输入的字符串按照长度来区分两种情况,因为当长度为5的时候比较复杂. ...

  8. java中像scanf一样多个输入_VB模拟键盘输入的N种方法

    VB模拟键盘输入的N种方法http://bbs.csdn.net/topics/90509805hd378发表于: 2006-12-24 14:35:39用VB模拟键盘事件的N种方法 键盘是我们使用计 ...

  9. 【C语言:精准打击】scanf_s()函数与scanf()函数的相关解决方案

    国际标准ANSI C中没有scanf_s()函数,只有scanf()函数,scanf()函数在读取时不检查边界,所以可能会造成内存泄露.故VC++2005/2008中提供了scanf_s()函数,在调 ...

最新文章

  1. jenkins java传递变量,jenkins实现tag构建传入变量不生效的情况解决
  2. 差点的更好设计理念的兴起
  3. mysql5.6.27_Centos上安装Mysql5.6.27多实例
  4. 缠绕多年的PCIE通道数问题终于完全明白了,欢迎指正
  5. Showdoc 搭建项目 API 文档系统
  6. ssm项目集成ftp_ssm开发旅游信息管理系统,包括前台和后台
  7. SetWindowsHookEx
  8. Owin服务无法启动问题整理
  9. [Node.js]Domain模块
  10. 硬着头皮,爬上龙门吊
  11. PyQt5最详细pyrcc5配置+样式使用
  12. error: File: XX 520.13 MB, exceeds 100.00 MB以上大文件导致push失败解决方法
  13. 人工智能对图书馆未来的影响,主要包含哪三个方面?
  14. PartnerLink,PartnerLinkType详解
  15. n行Python代码系列:五行代码实现两个视频画中画播放
  16. JAVA基础英语单词
  17. ai不同形状的拼版插件_Illustrator(AI)自动拼版脚本 V1.5下载(编组对象的复制位移)...
  18. 网站访问量统计实现.
  19. zookeeper节点创建
  20. 互联网金融青年会成立一周年庆典在京举办

热门文章

  1. 独家解读 | 滴滴机器学习平台架构演进之路
  2. ajax 传参数 java后台接收
  3. HTTP RTSP RTMP RTP 协议简说 流媒体学习(一)
  4. java中遍历Map的方法
  5. 分区表理论解析(上):SQL Server 2k52k8系列(一)
  6. android viewpager 底部tabhost,FragmentTabHost+ViewPager实现底部导航栏
  7. linux c 多线程socket编程,Linux多线程socket编程一些心得
  8. UAA服务基础环境搭建
  9. MySQL sql99语法—左(右)外连接
  10. Nginx全局块的工作进程的两个指令