• 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.

  • 相关阅读:
    win7游戏窗口设置
    怎么在 html 中 动态的加载一个 script
    nodejs+express +jade模板引擎 新建项目
    将大数据利用 BCP 导出SqlServer数据到CSV
    产品经理如何赢得开发人员的尊重和支持?-摘自infoq
    Microsoft TFS 如何显示在Windows 的上下文菜单中
    使用PowerDesigner 设计SQL Server 数据库
    sqlserver 删掉日志文件ldf以后 救命语句
    SqlServer修改数据库文件及日志文件存放位置
    快速备份sqlserver2005以上版本数据库的方法-摘自网络
  • 原文地址:https://www.cnblogs.com/twodog/p/12140437.html
Copyright © 2020-2023  润新知