黑马程序员-----第三篇 有关scanf函数

来源:互联网 发布:阿里云解析不成功 编辑:程序博客网 时间:2024/06/08 10:30
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

在学习过程中,有关于scanf函数存在很多的疑问,经过查阅,最终总结如下:

1、scanf的介绍以及使用

(1) scanf函数:如果使用这个函数,要包含一个头文件 stdio.h

(2) scanf是阻塞式的函数:函数执行后,会等待用户的输入,如果用户不输入任何内容,它会一直等待。

(3)scanf函数的作用:从键盘接收用户输入的内容,保存到指定的变量中。

(4)scanf函数的格式:scanf("格式控制符",输入项的地址列表);

代码练习:

#include <stdio.h>

void test(){

    //从键盘上接收一个人得年龄,然后打印出来

    //获取变量的地址:用取地址符号 &

    //1、定义变量

    int age=-1;

    //2、给一个提示,让用户输入一个年龄

    printf("请输入年龄:\n");

    //把用户输入的值,放到age变量中

    //如果输入的是小数,此时age只保存整数部分

    scanf("%d",&age); //获取了age这个变量的地址

    //3、打印用户输入的年龄

    printf("您输入的年龄是:%d\n",age);  

}

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

    //接收一个小数

    float score=0.0f;

    printf("请输入一个分数:\n");

    //接收用户输入的值保存到score

    scanf("%f",&score); //此处不允许写%m.nf,但是%mf是可以的

    //打印score的值

    printf("%3.2f\n",score);

    test();     //调用test函数

    return 0;

}

输入:99回车20回车

输出结果如下:

请输入一个分数:

99

99.00

请输入年龄:

20

您输入的年龄是:20

2、scanf使用的注意事项

(1)scanf函数当遇到回车的时候,会结束执行。

(2)接收单个变量值的时候,在输入值之前,如果我们输入了空格 回车 tab,都会被忽略。

(3)关于scanf中,尽量不要使用 \n,如果一不小心使用了:

   1) 输入值后,随便输入一个内容

   2)\n要原样输入

代码测试如下:

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

    int age=-1;

    scanf("%d\n",&age); //只能输入跟scanf一样的格式,否则输出结果不正确

    printf("age = %d\n",age);

    return 0;

}

如上所示的代码:要想得到想要的结果,只能按照格式输入数字和\n。例如输入:20\n

输出结果是:age=20

3、scanf函数原理以及本质

  (1)当用户输入内容后,用户输入的内容会被存放到scanf的输入缓冲区中。然后,scanf函数会根据格式控制的字符的要求,从输入缓冲区依次取它想要的内容。如果从缓冲区中取得内容和和我们的格式要求一致,则把值存放到变量中(%d %c %d)。如果格式不一致,则不修改变量的值。

(2)如果scanf缓冲区中还有内容,则scanf不会提示我们再次输入。

(3)运行流程:

     1)首先系统会提供一个缓存(可以存储用户输入的内容的一段内存)

     2)scnaf 在执行的时候,会首先到缓存中进行扫描,将取得的字符与格式化字符串进行比对,如果比对不成功,那么不读取任何字符函数结束。如果比对成功,那么读取匹配到的数据,然后结束,并将匹配到的数据转换成必要的格式,赋值给传入的变量。




0 0
原创粉丝点击