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,没有区别