• C语言tips_2 关于scanf 读取规则小结以及与getchar 的区别


    第一点: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型的。

  • 相关阅读:
    企业身份识别系统 corporate Identity System
    初试C#中的应用程序+SQLServer编写
    组策略对软件使用的限制
    Ajax初试
    Web技术应用率报告
    领导者必须抵御的诱惑
    asp与网站安全的初步构想(1)——操作系统安全
    XP 的Bug?
    C#的多线程(2)——机制探索
    网站设计
  • 原文地址:https://www.cnblogs.com/LuoRuidiLoveMiku/p/11370308.html
Copyright © 2020-2023  润新知