zoukankan      html  css  js  c++  java
  • C/C++ scanf 函数中%s 和%c 的简单差别

    首先声明:在键盘中敲入字符后,字符会首先保存在键盘缓冲区中供scanf函数读取(scanf。getchar等函数是读取缓冲区,getch函数是读取的控制台信息,即为直接从键盘读取)。另外特别注意键盘上敲入回车实际为“ ”,但存储到缓冲区时候会舍弃‘ ’而仅仅存储 .比如我们敲入字符“12345回车”。缓冲区内存储的为“12345 ”.

    文章中“_”代表空格

    代码:

    char *s;

    scanf("%s",s);

    printf("%s ",s);

    scanf("%s",s);

    printf("%s ",s);

    例:

    输入:123_345回车            “_”代表空格

    输出:123

               345

    分析:对于scanf以%s格式输入时候。“空格、换行符、TAB”等是作为两个数据的分隔符存在的。即分隔符前后是两个数据,读入时候分隔符不读入。

    例:

    输入:123回车

            456回车

    输出:123

               456

    原因:如事例1,输入123回车后。缓冲区内存的是123 。第一次读入后,缓冲区内仅仅剩余了 ,当第二次读入时候。 是以分隔符存在的。不读入第二次的是。故缓冲区中是没有数据存在的,所以须要继续输入数据。

    例:

    输入:_回车                     “_”代表空格

    这样的输入会要求一直输入,这是由于空格和 都是分隔符。没有数据。所以没办法读入。

    相同直接输入回车也是一直要求输入


    代码:

    char *s;

    scanf("%s",s);

    printf("%s ",s);

    scanf("%c",s);

    printf("%d ",*s);

    例:

    输入:1234_12回车                     “_”代表空格

    输出:1234

               32(空格的ASCII为32)

    原因:对于第一个%s读入时遇到分隔符“空格”就停止,可是空格还是保存在缓冲区的。对于%c读入时候,“空格、 、TAB”等是正常字符,所以第二次读入时候读取缓冲中的第一个字符“空格”。所以输出的是32.


    事例2:

    输入:123回车

    输出:123

               10( 的ASCII为10)

    原因:%s读入后缓冲中指剩下了 故第二次以%c读入时候就读入了 。输出为10.

  • 相关阅读:
    call和apply的区别
    淘宝镜像(cnpm)的安装和使用
    文件包含漏洞
    vue简单的日历
    微信小程序(mpvue)—解决视频播放bug的一种方式
    vue 异步组件
    vuex的学习笔记
    vue2.0 添加监听滚动事件
    jquery tmpl生成导航
    vue 控制视图
  • 原文地址:https://www.cnblogs.com/twodog/p/12140436.html
Copyright © 2011-2022 走看看