在C语言中scanf作为重要的输入操作函数,对于熟悉C语言有重要意义。
1.头文件
scanf和printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include 。它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。
2.格式
如
#includeint main(){int a;scanf("%d", &a);return 0;}
也就是scanf(“格式”,地址);的形式,但是在VS2019等编译器上编译时会报错,此时只需要在程序第一行加上
#define _CRT_SECURE_NO_WARNINGS 1
就可以正常编译了。
在一些特殊情况如需要输入多个值时
#includeint main(){int a,b;scanf("%d %d", &a,&b);return 0;}
在窗口输入时也应该按照双引号中的格式进行输入,如上面这个程序的输入就需要输入一个整数+空格+整数。
3.scanf的返回值
首先我们来看这个程序
#includeint main(){int a,b;int c=scanf("%d %d", &a,&b);printf("%d", c);return 0;}
通过运行我们发现输入两个值后输出结果为2
即scanf返回值为读取到的输入值的个数,由此我们可以进一步延伸
当我们需要输入多组数据也就是一下子需要输入多个数时,我们可以根据scanf的返回值来进行一个循环的判断
#includeint main(){int a,b;while (scanf("%d %d", &a, &b) == 2){printf("%d", a / b);}return 0;}
如果输入的数据个数不是2,那么循环结束,同理也能用EOF文件结束标志来判断,scanf如果遇到了EOF(即你输入的是ctrl+z),返回的是-1,如果读取发生错误,就会返回0。
#includeint main(){int a,b;while (scanf("%d %d", &a, &b) !=EOF){printf("%d", a / b);}return 0;}
这里注意,在编译器输入Ctrl+z即可跳出while循环
由此来实现多组数据输入
4.scanf结束数据输入
scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:
(1)遇空格、“回车”、“跳格”键;
(2)遇宽度结束;
(3)遇非法输入。
如果想输入一段带空格的字符串,我们可以用scanf(“%[^\n]”,str];来读取含空格的字符串或者直接用gets();函数也可以达到一样的效果,^可以理解为非。^\n就表示非\n,即遇到非\n的字符就读入,即他可以读入直到你输入一个回车前的所有字符(包括空格)。所以scanf里面最好不要使用\n和空格。