C语言键盘输入采集scanf函数
前面说过C语言的额printf函数,那么这一次说说scanf函数。
这两个函数像两兄弟,比如在C++里面经常遇到set和get,就差不到就是scanf和printf的意思,printf用来通过终端输出一些内容,scanf用来通过终端输入一些内容。
先看看这个函数的原型:
1
2
3# include
int scanf(const char *format, ...);
哇哦,这么多没有见过的,貌似不懂什么意思,没问题,一步一步来理解。
先来个好理解的,这个函数的意思就是:
1scanf("输入控制符", 输入参数);
就是将键盘输入的参数转换为输入控制符规定格式的数据,然后保存到输入参数地址所表示的变量里面。
举个简单的例子:
1
2int i;
scanf("%d", &i);
这个小段的意思就是输入一个数字,把这个数字作为传入参数赋值给变量i。
这个有个问题需要特别注意,就是&i的使用,很多人刚开始都会只输入i,实际需要传入的是一个地址,特别留意。
来个简单的小例子:
1
2
3
4
5
6
7
8
9
10
11/*beginner/scanf/scanf1.c*/
#include
int main(void)
{
int i;
i = 1314;
printf("i = %d\n", i);
return 0;
}
这个我们最开始编写的程序,如果需要打印一个我们需要的,就要每次修改源码,然后再编译运行,比如刚开始我们要一生一世1314,后来一想不对呀,要生生世世3344方显诚心吗,改过来,如此这般。
但是如果碰到一个变化不断的数字怎么办,比如让你说如N个学生的成绩,用来判断是否达到老师的期望,这个时候再改源码就不合适了,怎么办呢,就需要使用scanf函数了,如下所示:
1
2
3
4
5
6
7
8
9
10
11/*beginner/scanf/scanf2.c*/
#include
int main(void)
{
int i;
scanf("%d", &i);
printf("i = %d\n", i);
return 0;
}
不错,已经每次可以通过终端输入打印出来不同的值了。
但是最后有个提示对不对,好的,大部分人会这么写,但是就会出现各种各样的问题:
1
2
3
4
5
6
7
8
9
10
11/*beginner/scanf/scanf3.c*/
#include
int main(void)
{
int i;
scanf("please input i %d", &i);
printf("i = %d\n", i);
return 0;
}
正确的写法是怎么样的呢,如下:
1
2
3
4
5
6
7
8
9
10
11
12/*beginner/scanf/scanf4.c*/
#include
int main(void)
{
int i;
printf("please input i :");
scanf("%d", &i);
printf("i = %d\n", i);
return 0;
}
看到区别了吗,区别就是把要显示的东西还是使用printf来,只有最简单的输入用scanf来,其实用scanf也是可以的,如果按照scanf3的代码来,你需要在终端中输入的语句是:please input i 1314,这样才能满足你的需求,但显然这不符合你的初衷,对吧。
所以这也说明了另一个问题,那就是scanf的格式与输入需要保持严格一致。
编译运行
直接输入make就可以了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19#beginner/scanf/Makefile
ALL : scanf1 scanf2
scanf1: scanf1.c
gcc -o scanf1 scanf1.c
scanf2: scanf2.c
gcc -o scanf2 scanf2.c
scanf3: scanf3.c
gcc -o scanf3 scanf3.c
scanf4: scanf4.c
gcc -o scanf4 scanf4.c
.PHONY : clean
clean:
rm -f scanf1 scanf2 scanf3 scanf4
运行自行琢磨。