第一点:scanf默认回车空格是输入不同组之间的间隔和结束符号。 也就是说他不会读取 空格 和 换行符。而是把他们当作一个 数据被读取完成的标志!他的停止标志则为,当%d之类的数据输入结束之后,自动停止。

例子

  两种输入方式

注意一点是,以上的换行符和空格符号都被保留在了键盘缓冲区。

这里多提一句 什么事键盘缓冲区。

https://iask.sina.com.cn/b/11857759.html可以看看这个dalao说的。

或者这样理解

键盘的内部有一块微处理器,它控制着键盘的全部工作,比如主机加电时键盘的自检、扫描,扫描码的缓冲以及与主机的通讯等等。当一个键被按下时,微处理器便根据其位置,将字符信号转换成ASC||码,传给主机和显示器。如果操作人员的输入速度很快或CPU正在进行其它的工作,就先将键入的内容送往内存中的键盘缓冲区,等CPU空闲时再从缓冲区中取出暂存的指令分析并执行.

第二点 若要scanf 读取到 换行符或者是空格 需要用 %c 来表示例如这样

可以看到第一个换行符 和之后的空格全部读取到了。

第三点 getchar 的具体用法

getchar 他不需要任何设置 因为他在被定义的时候是 int getchar(void)  其实这里我的目的并不是强调他的参数,而是他的返回值 大家一定注意是 int 不是 char 。并且他还是该字符的ASCII 码。

其实getchar 像个铁憨憨,只要是在键盘缓冲区的数据他都会读取,它的停止标志为换行符,每被调用一次都会读取一个字符包括 空格符,换行符。

以下是一些简单的例子:

 注意这里的输入是 ‘q’+‘换行符’+‘w’。 这就是为什么当我打完'q'+‘换行符’之后第二个输入直接看似被跳过,其实它已经把之前还残留在缓冲区的换行符读入到了b ,可以看最后打印出b的数值的时候显示的是 10 这个就是换行符的ASC|| 码。

接下来解释下,为什么很多人都会把 getchar 的返回值理解成 char 而不是int ,因为当我们想要程序返回一个字符的时候这里面隐藏了一个转换,即从int->找到ASC|| 所对应的char是谁同样当我们输入的是一个int值我们想让他转化成ASC|| 也是一种 隐藏转换。看例子:

这里我的输入是'r'+'空格符' +‘换行符’。但是我的a值其实是int型的。

C语言tips_2 关于scanf 读取规则小结以及与getchar 的区别的更多相关文章

  1. C语言中关于scanf函数的用法

    scanf()函数的控制串 函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]); scanf()函数是通用终端格式化 ...

  2. C语言的声明的优先级规则

    C语言的声明的优先级规则如下: A 声明从它的名字开始读取,然后按照优先级顺序依次读取 B 优先级从高到低依次是:   B.1 声明中被括号括起来的那一部分   B.2 后缀操作符[圆括号 ()表示这 ...

  3. cookie在不同域名domain、path下的读取规则

    cookie 子域名可以读父域名中的cookie 如在 .ping.com域下注入cookie,则该子域下的网页如p1.ping.com.p2.ping.com 都能读取到cookie信息 path的 ...

  4. Go语言中字符串的查找方法小结

    这篇文章主要介绍了Go语言中字符串的查找方法小结,示例的main函数都是导入strings包然后使用其中的方法,需要的朋友可以参考下   1.func Contains(s, substr strin ...

  5. 关于C语言的输入-scanf、gets、getchar、getch、getline

    找工作刷题,重拾C语言,发现对键盘输入掌握很生疏,现总结各类输入函数使用方法和注意事项如下. 1.scanf("格式说明",变量地址列表) scanf("%s" ...

  6. 在C语言中使用scanf语句时遇到的问题总结

    在使用visual studio2013编写c语言代码时,遇到了这样的几个小问题,进行如下的总结. 1, 关于使用scanf语句报错的解决方案1 #include <stdio.h> in ...

  7. C语言中的声明解析规则——数组,指针与函数

    摘要:C语言的申明存在的最大问题是:你无法以一种人们所习惯的自然方式和从左向右阅读一个声明,在引入voliatile和const关键字以后,情况更加糟糕了.由于这些关键字只能出现在声明中,是的声明形式 ...

  8. gets_s()函数的参数太少,strcpy_s():形参和实参 2 的类型不同,等c函数在Visual Studio上出现的问题, get()函数和scanf()读取字符串的区别,栈的随机性

    首先,这些C函数,在VS上要加_s后缀的原因是,这些函数存在字符串越界等问题,可以参考这篇文章,https://blog.csdn.net/silleyj/article/details/854540 ...

  9. scanf()函数用法小结

    scanf()函数是格式化输入函数,它从标准输入设备(键盘) 读取输入的信息. 其调用格式为:      scanf("<格式化字符串>",<地址表>); ...

随机推荐

  1. 快速排序Quick_Sort

    快排——排序中的明星算法,也几乎是必须掌握的算法,这次我们来领略以下快排为何魅力如此之大. 快排主要有两种思路,分别是挖坑法和交换法,这里我们以挖坑法为例来进行介绍,交换法可以参考这篇博文.值得一提的 ...

  2. TCP/IP分层图解

    网络协议通常分不同层次进行开发,每一层分别负责不同的通信功能.一个协议族,比如 T C P / I P,是一组不同层次上的多个协议的组合. T C P / I P通常被认为是一个四层协议系统,如图1 ...

  3. Java并发包--LinkedBlockQueue

    转载请注明出处:http://www.cnblogs.com/skywang12345/p/3503458.html LinkedBlockingQueue介绍 LinkedBlockingQueue ...

  4. Java集合--Set架构

    前面,我们已经系统的对List和Map进行了学习.接下来,我们开始可以学习Set.相信经过Map的了解之后,学习Set会容易很多.毕竟,Set的实现类都是基于Map来实现的(HashSet是通过Has ...

  5. java后台实体类设置默认值

    private String orderPrice;//定义类的属性 /* * get set方法 * String.trim() 返回字符串的副本,忽略前导空白和尾部空白. */ public St ...

  6. jaxb读有BOM的XML文件问题

    一开始找了半天没找到什么原因,读文件就报错: Content is not allowed in prolog 后来发现是文件是UTF-8带BOM和不带BOM的问题 问题就好解决了,直接读带BOM文件 ...

  7. BZOJ3122 随机数生成器——BSGS

    题意 链接 给定 $p,\ a,\ b, \ x_1$,现有一数列 $$x_{i+1} \equiv (ax_i + b) \ mod \ p$$ 求最小的 $i$ 满足 $x_i = t$ 分析 代 ...

  8. BZOJ 4318 OSU! (概率DP)

    题意 中文题面,难得解释了 题目传送门 分析 考虑到概率DPDPDP,显然可以想到f(i,j)f(i,j)f(i,j)表示到第iii位末尾有jjj个111的期望值.最后输出f(n+1,0)f(n+1, ...

  9. Nginx:Nginx概要

    简介 nginx是俄罗斯开源的HTTP和代理服务,也可以作邮件服务器. 核心功能: 1.正向代理:客户机的请求先到达nginx,再由nginx代理访问互联网资源 2.反向代理:客户机请求互联网,到达n ...

  10. sz/rz

    需要客户端的支持,CRT或者Xshell等 linux端默认是不支持的, 不用通过传输工具来传输文件 yum -y install lrzsz