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