05-scanf函数

作者: Andy_Livings | 来源:发表于2020-05-29 10:20 被阅读0次

    一、变量的内存分析

    1.字节和地址

    为了更好地理解变量在内存中的存储细节,先来认识一下内存中的“字节”和“地址”。
    1>内存以“字节为单位”


    “字节”和“地址”

    0x表示的是十六进制
    2>不同类型占用的字节是不一样的,数据越大,所需的字节数就越多

    2.变量的存储

    1>所占用字节数跟类型有关,也跟编译器环境有关


    字节数跟类型有关,也跟编译器环境有关

    2>变量实例

    int b = 10;
    int a = 20;
    
    • 内存由大到小寻址,优先分配内存地址较大的字节给变量。b的内存地址比a大
    • 每个变量都有地址:第一个字节的地址就是变量的地址

    3>查看内存地址:

    int a;
    printf("a的地址是:%p\n", &a);
    

    4>注意
    在变量未经初始化之前,不要尝试使用变量的值

    int a;
    printf("a的值是:%d\n", a);
    

    上面的写法是不建议

    二、scanf函数

    1.简介

    这也是在stdio.h中声明的一个函数,因此使用前必须加入#include <stdio.h>。调用scanf函数时,需要传入变量的地址作为参数,scanf函数会等待标准输入设备(比如键盘)输入数据,并且将输入的数据赋值给地址对应的变量

    2.简单用法
    int age;
    scanf("%d", &age);
    
    • scanf函数时,会等待用户的键盘输入,并不会往后执行代码。scanf的第1个参数是"%d",说明要求用户以10进制的形式输入一个整数。这里要注意,scanf的第2个参数传递的不是age变量,而是age变量的地址&age,&是C语言中的一个地址运算符,可以用来获取变量的地址
    • 输入完毕后,敲一下回车键,目的是告诉scanf函数我们已经输入完毕了,scanf函数会将输入的值赋值给age变量
    3.其他用法

    1>用scanf函数接收3个数值,每个数值之间用中划线-隔开
    scanf("%d-%d-%d", &a, &b, &c);
    3个%d之间是用中划线-隔开的,因此我们在每输入一个整数后都必须加个中划线-,比如这样输10-14-20,不然在给变量赋值的时候会出问题

    • 注意:数值之间的分隔符是任意的,不一定要用中划线-,可以是逗号、空格、星号*、井号#等等,甚至是英文字母
    // 逗号, 
    scanf("%d,%d,%d", &a, &b, &c); // 输入格式:10,14,20  
    // 井号# 
    scanf("%d#%d#%d", &a, &b, &c); // 输入格式:10#14#20  
    // 字母x 
    scanf("%dx%dx%d", &a, &b, &c); // 输入格式:10x14x20
    

    2>用scanf函数接收3个数值,每个数值之间用空格隔开

    scanf("%d %d %d", &a, &b, &c);
    

    3个%d之间是用空格隔开的,我们在每输入一个整数后必须输入一个分隔符,分隔符可以是空格、tab、回车

    4.注意

    scanf的第一个参数中不要包含\n,比如scanf(“%d\n”, &a); 这将导致scanf函数无法结束

    5.习题

    提示用户输入两个整数n,然后计算并输出两个整数的和




    三、程序实现

    01-scanf函数的基本使用

    void basic_use_scanf_function(void) {
        
        // 定义一个变量,用来保存用户输入的整数
        int number;
        
        // scanf函数只接受变量的地址
        // scanf函数是一个阻塞式的函数,等待用户输入
        // 用户输入完毕后,就会将用户输入的值赋值给number变量
        // 函数调用完毕
        scanf("%d", &number);
        
        printf("用户输入的值是%d\n", number);
    }
    

    02-scanf练习

    void scanf_practice(void) {
        
        // 提示用户输入两个整数,计算并且输出两个整数的和
        
        // 1.定义2个变量,保存用户输入的整数
        int num1, num2;
        
        // 2.提示用户输入第1个整数
        printf("请输入第1个整数:\n");
        
        // 3.接收用户输入的第1个整数
        scanf("%d", &num1);
        
        // 4.提示用户输入第2个整数
        printf("请输入第2个整数:\n");
        
        // 5.接收用户输入的第2个整数
        scanf("%d", &num2);
        
        // 6.计算和,并且输出
        int sum = num1 + num2;
        printf("%d + %d = %d\n", num1, num2, sum);
        
        printf("num1 = %d, num2 = %d\n", num1, num2);
    }
    

    03-scanf的其他用法和注意

    void other_uses_and_notes_of_scanf(void) {
        
        /* 1.输入字符
         char myc;
         
         scanf("%c", &myc);
         
         printf("输入的字符是%c\n", myc);
         */
        
        /* 2.一次性输入多个数值,并且以某些符号隔开
         int num1, num2;
         
         scanf("%d#%d", &num1, &num2);
         
         printf("num1=%d, num2=%d\n", num1, num2);
         */
        
        /*
         3.如果scanf参数中以空格隔开,实际输入可以以空格、tab、回车作为分隔符
         int num1, num2;
         scanf("%d %d", &num1, &num2);
         printf("num1=%d, num2=%d\n", num1, num2);
         */
        
        /*
         4.scanf中不能写\n
         int a;
         scanf("%d\n", &a); // 错误写法
         printf("a的值是%d\n", a);
         */
    }
    

    相关文章

      网友评论

        本文标题:05-scanf函数

        本文链接:https://www.haomeiwen.com/subject/eznwahtx.html