一、输入单个数据
举个栗子:
二、输入多个数据
1.默认的数据分割符
多个数据之间的分割符默认为:回车符 或 制表符 或 空格符
对于下面的语句:
输入时,三个整数之间的间隔是上面三种分割符的任意一种。
2.指定数据的分割符
a.如果指定的分割符是默认的三种分割符,则和没有指定效果一样。
b.如果是其他的分割符,输入时必须输入指定分割符
如下面的四条语句所示:
下面的三条语句和第一条语句的执行效果一样。如下面的语句所示:
指定了第一个数据和第二个数据之间用 “,”分割,第二个数据和第三个数据之间用字符 “a” 分割。
则输入时,需要按照下面的格式输入数据。
3.指定数据的输入宽度
输入数据达到指定宽度时, scanf函数认为该数据输入完成。
- 如下面的代码所示:
输入数据时,按照如下的格式输入:
4.遇到非法输入时的处理
当输入的数据非法时,scanf会结束当前参数输入。
- 如下面的代码所示:
按照如下的方式输入:
当输入字符“a”时,scanf函数会认为第一个整型的参数输入完毕。
三、输入结束的判断
满足下面条件时,输入回车后,结束scanf的输入。
1. 当输入的参数个数已经到达scanf要接收的参数个数。
2. 分割符不是默认的三种分隔符:回车符 或 制表符 或 空格符
3. 输入的数据, 对于所有的参数都是非法字符
举个栗子:
四、特殊的“%c”
当scanf函数的参数是%c的时候,scanf函数会把缓冲区的第一个字符返回回去,不管是什么。(不管是回车符 或 空格符 或 其他的任何字符)
五、字符串输入
举个栗子:
六、“垃圾回收”
最后输入的回车,会残留在操作系统的输入缓冲区中,影响下一次的输入。
如下面的代码所示:
输入时,当输入完123,按下回车后,直接执行到了打印输出的语句。程序并没有等待我们输入字符 。原因是:123被接收至变量 a 中,而 ‘\n’ 被接收至变量 c 中。
上述问题的解决办法是:添加一条 getchar(); 语句。去掉缓冲区中的 ‘\n’ 。
七、分割符结尾
以默认的分割符结尾,scanf会认为参数输入还没有完成,继续等待输入。
所以不要用这样的格式结尾。
举个栗子:
当输入完数字5.1,按下回车时,scanf函数并没有返回,需要再多输入一个数据,scanf函数才会退出。