scanf()

1、&是取地址符号

&+变量名表示该变量的地址,将从用户输入端获得的数据存储到该变量的地址中

2、输入机制

%f、%lf、%d以“空白字符”为间割,空白字符有空格、制表符(\t)、回车符,遇到空白字符停止读取

%c没有间隔,逐字符读取

实验一:

#include <stdio.h>
int main()
{
    int a;
    printf("请输入:");
    scanf("%d", &a);//输入100 200,实际只读取了100
    printf("%d\n", a);
    printf("%d\n", a);

    return 0;
}

 

注意不能定义两个变量,结果为:

实验二:

#include <stdio.h>
int main()
{
    char a;
    printf("请输入:");
    scanf("%c", &a);  //输入100,实际只读了字符‘1’
    printf("%c\n",a);
    printf("%c\n", a);
    printf("%d\n", a);  //输出49,字符‘1’的ASCII码值为49

    return 0;
}

结果为:

实验三:

%c不会把空格跳过去

#include <stdio.h>
int main()
{
    char a;
    scanf("%c", &a);//输入空格+100
    printf("a=%c!", a);

    return 0;
}

结果是:

实验四:

#include <stdio.h>
int main()
{
    int a;
    int b;
    printf("请输入:");
    //输入100 200 300,摁下回车
    //输入缓冲区:100 200 300 回车符
    scanf("%d", &a);
    //输入缓冲区:200 300 回车符
    scanf("%d", &b);
    //输入缓冲区:300 回车符
    printf("%d\n", a);
    printf("%d\n", b);

    return 0;
}

两个scanf时,必须定义两个变量,结果是:

实验三代码可以优化成:

#include <stdio.h>
int main()
{
    int a;
    int b;
    printf("请输入:");
    scanf("%d%d", &a, &b);
    printf("a=%d,b=%d\n", a, b);

    return 0;
}

应当注意scanf中的两个%d之间最好不要加任何符号,否则输入端要以中间的那个符号作为间隔,输入端如果没有该符号,就会出现问题

3、定义一个scanf()函数的返回值

当所定义的数据类型与用户输入的数据类型不相符时,就会出现问题,输出的结果不是预期的结果,这时可以定义一个变量来表示成功读取数据的个数

实验五:

#include <stdio.h>
int main()
{
    int a;
    int b;
    int c;
    int ret;
    printf("请输入:");
    ret=scanf("%d%d%d", &a,&b,&c);
    printf("a=%d b=%d c=%d\n", a,b,c);
    printf("ret=%d\n", ret);

    return 0;
}

当中间的一个数据读取不成功时,后面的数据都不能成功读取

实验六:(代码同实验五)

4、double类型的输入

输入double类型的值必须用%lf,不能用%f,否则输入失败

输出double类型变量的值可以用%lf,也可以用%f,没有区别

 

posted @ 2019-02-20 23:57  小白Hello_world!  阅读(2374)  评论(0编辑  收藏  举报