scanf是c语言中的常用函数,使用前导入stdio.h
这里讲一些经常遇到的问题。
首先要明白scanf的本质。当我们需要调用scanf输入的时候,输入的字符送到键盘缓冲区,然后scanf从中读取所规定的字符,比如我们scanf中要求的是%d,即数字型,那么属于数字的内容将被读取,当遇到不属于数字的内容时,扫描终止,比如我们输入的是5s5555,那么只有第一个5能接收,如果输入8 555,那么也只有第一个8能收到。但是没有收到的部分并不是被抛弃,而是继续保留在缓冲区中,当需要下一次scanf时,从缓冲区读数据。
1,字符串注意事项。
字符串需要注意的是,空格和回车也会被scanf认为是字符,所以,举个例子
#include <stdio.h>
int main(){
int a;
char b;
scanf("%d",&a);
scanf("%d",&b);
}
输入 8 回车
会发现程序即终止,原因是因为,当我们输入8然后回车时,回车符任然留在缓冲区,然后被scanf扫描给b。
还要注意的是scanf在接受字符串时候遇到空格也会终止,解决办法是限定扫描集合
scanf("%[^\n]s",str);或者是用gets函数
解决办法是getchar();或者是fflush(stdin);后者是将缓冲区清空;
再看下面一个
scanf("%c %c",&a,&b);
scanf("%c%c",&a,&b);
上面两个语句有什么区别呢?
其实区别就在于,第一个说明了用空格符作为间隔符。对于第二个语句,如果输入
A空格
那么打印出来a,b变量就分别是A和空格,但是对于第一个,则会一直等待另一个字符的输入,另外,第一个也不要求一定要有空格,如果输入cc则a和b都是c。也就是说,它的真正意义是空格会被忽略,不止是空格,换行符也会被跳过。
2,数字
数字,可以容纳大小长度,如%4d,那么他限制四个位,如果不足没有关系,比如输入8s8888,那么只有第一个8,如果输入的位数超过那么只有前面四个
如88889999,只有8888;