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.

  • 相关阅读:
    (转载)李开复:我在硅谷看到的最前沿科技趋势
    1019. 数字黑洞 (20)
    1018. 锤子剪刀布 (20)
    1017. A除以B (20)
    1016. 部分A+B (15)
    1015. 德才论 (25)
    1013. 数素数 (20)
    1014. 福尔摩斯的约会 (20)
    1012. 数字分类 (20)
    1011. A+B和C (15)
  • 原文地址:https://www.cnblogs.com/twodog/p/12140437.html
Copyright © 2011-2022 走看看