• C语言之scarf函数


    一 基本用法

     

     scanf函数:接收用户的输入

         语法:

           scanf("格式化控制符",地址列表);

     

         例:

            int num;

           scanf("%d",&num);//代表接收用户输入一个整数,把这个整数赋值到num所在的空间

     

         如果要接收字符呢???

            char ch;

            scanf("%c",&ch);

     

     tips:千万要记住:scanf的格式化控制符后面不要加

     

     scanf函数有一个特点:它叫阻塞式函数

     

        意思就是:当程序执行到它这一句的时候,会暂时停止,不会继续往下执行,直到用户输入完才会继续往下执行

    二 详解

    尽量在让用户输入给一个提示

         printf补充:可以同时挖N个坑(同时在内存中开辟N个空间),但是你给的值的顺序必须一致,而且类型也必须一致

     

     

     1、也可以同时输入两个整数,分别输入两次就行了,或者用空格隔开

     2、scanf里面的格式化控制符也可以用其他符号隔开,但是不管你用什么格式,输入的时候必须以你的那个格式来输入,否则会输入异常

     3、最好不要先接收输入任何一个类型的数据后,立即再接收输入一个字符

     4、最好不要把字符型和其他类型放在一起输入(tips:为什么呢?请看下面的运行原理)

    三 运行原理

    首先,scanf在内存中有个位置,叫缓冲区,里面是保存所有用户输入的数据的

     

    用scanf接收用户输入的时候:

    1.先去缓冲区里面找有没有合适的数据,如果有,则直接把缓冲区的这个数据赋值给你的变量(意味着不要用户输入了)

    2.如果没有,才会让用户进行输入,输入以后,数据先放在缓冲区

    3.然后再从这个缓冲区里面找数据

    tips:如果要接收的是数字,但是输入的是字符,那么会忽略(不给那个变量赋值)

    以后如果要接收一个字符的话,一定要记得在前面加空格(tips:会过滤掉所有的空格和回车)

     

    tips:代码例子如下

     

    #include <stdio.h>

    int main(int argc, const char * argv[]) {

       

        /*

         int num1;

         scanf("%d",&num1);

        

         char ch;

         scanf("%c",&ch);

        

         printf("num1=%d   ch=%c ",num1,ch);

         */

       

        /*

         int num;

         char ch;

        

         scanf("%d%c",&num,&ch);//会让用户输入,依次输入200空格a回车

        

         printf("num=%d   ch=%c ",num,ch);//num=200 a=空格

        

         char ch2;

         scanf("%c",&ch2);//不会让用户输入

         printf("ch2=%c ",ch2);//ch2里保存的是a

        

         char ch3;

         scanf("%c",&ch3);//不会让用户输入

         printf("ch3=%c ",ch3);//ch3里面保存的是回车

         */

     

        /*

         char ch;

         scanf("%c",&ch);//输入完以后a,a,2,0

        

         int num;

         scanf("%d",&num);//这里还会让我继续输入,因为上面缓冲区留下来的 和int类型不符合,所以会让我输入

        

         printf("ch=%c   num=%d ",ch,num);

         */

       

        //    int num = 200;

        //    scanf("%d",&num);//如果输入的是字母,直接忽略

        //

        //    printf("num=%d ",num);

       

        /*

         char ch;

         scanf("%c",&ch); //aa20

        

         int num = 200;

         scanf("%d",&num);

        

         char ch2;

         scanf("%c",&ch2);

        

         printf("ch=%c   num=%d  ch2=%c ",ch,num,ch2);//a  200  a

         */

       

        /*

         int num;

         scanf("%d",&num);

        

         char ch;

         scanf("%c",&ch);//如果接收字符的话,很容易吸收掉上一次输入的空格或者回车,那么要解决这个问题怎么办???

        

         printf("num=%d   ch=%c ",num,ch);

         */

       

        //解决办法一:

        /*

         int num;

         scanf("%d",&num);

        

         char temp;

         scanf("%c",&temp);//帮我们吸收掉回车了

        

         char ch;

         scanf("%c",&ch);//如果接收字符的话,很容易吸收掉上一次输入的空格或者回车,那么要解决这个问题怎么办???

        

         printf("num=%d   ch=%c ",num,ch);

         */

       

        //解决办法二

        //    int num;

        //    scanf("%d",&num);

        //

        //    char ch;

        //    scanf(" %c",&ch);//会自动过滤掉所有的空格和回车

        //

        //    printf("num=%d   ch=%c ",num,ch);

       

         //解决办法三(推荐方法)

        //    int num;

        //    scanf("%d",&num);

    //

    //    rewind(stdin); //自动帮助我们清空缓冲区的数据

        //    char ch;

        //    scanf("%c",&ch);

        //

        //    printf("num=%d   ch=%c ",num,ch);

     

       

        return 0;

    }

     

    不忘初心,方得始终
  • 相关阅读:
    BZOJ4245: [ONTAK2015]OR-XOR(前缀和)
    [HDU 4433]locker[DP]
    近期刷题的c语言总结。
    《BackboneJS框架的技巧及模式》(4)完结篇
    x+2y+3z=n的非负整数解数
    [置顶] 程序员看婚姻
    BNU29368:Check the Identity(栈)
    Python解决codeforces ---- 1
    带你走进EJB--MDB实现发送邮件(3)
    JIRA简介
  • 原文地址:https://www.cnblogs.com/jialiangliang/p/5986089.html
Copyright © 2020-2023  润新知