第一点: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. 【翻译】PATH究竟是什么?

    最近,我试图向一个朋友解释他电脑上PATH变量是用来做什么的.我在我们所交流的平台‘the Slack group"写了一篇比较长的消息之后,我意识到这个主题可以写成一个很好的博客,所以开始 ...

  2. C++ extern关键字

    [参考] 关于C++中extern的简单笔记

  3. Codeforces Round #595 (Div. 3) A,B,C,D

    A题:n个学生,分成任意组,要求每组中任意两名学生的技能值相差不等于1,问最小分组. #include<bits/stdc++.h> using namespace std; #defin ...

  4. 【题解】Knight Moves-C++

    题目Description在一个8*8的棋盘上,一只中国象棋中的马要从一个点跳到另一个点.问最少需要多少步.Input整个测试组由多组数据组成,请做到文件底结束.对于每组数据,前两个坐标代表出发点,后 ...

  5. mousemove([[data],fn])

    mousemove([[data],fn]) 概述 当鼠标指针在指定的元素中移动时,就会发生 mousemove 事件.大理石构件来图加工 mousemove事件处理函数会被传递一个变量——事件对象, ...

  6. Lavevel 中 trait 如何继承与复写

    1 写一个基类 2 基类中 use YourTrait 3 写一个子类 extends 基类 4 子类中覆写 YourTrait 中的同名方法 $query = parent::scopeOfPara ...

  7. DbVisualizer用JDBC连接SQL Server

    1.安装驱动,解压后得到jar文件 Drivers 4.1 and 4.0 for SQL Serve http://www.microsoft.com/en-us/download/confirma ...

  8. @Component,@Service,@Controller,@Repository

    1.@controller 控制器(注入服务) 2.@service 服务(注入dao) 3.@repository dao(实现dao访问) 4.@component (把普通pojo实例化到spr ...

  9. python输出的高亮显示

    一.语法 1.书写格式 开头部分: \033[显示方式;前景色;背景色m 结尾部分: \033[0m   例如:\033[31;1m测试的文字部分\033[0m   注意: 开头部分的三个参数:显示方 ...

  10. windows游戏编程X86 32位保护模式下的内存管理概述(一)

    本系列文章由jadeshu编写,转载请注明出处.http://blog.csdn.net/jadeshu/article/details/22445945 作者:jadeshu   邮箱: jades ...