scanf是位于我们标准库内的一个输入函数,初学C经常会用到:
格式:scanf("%..",&...),
前面是输入类型,后面是输入内容的地址;
看以下代码;
#include <stdio.h>
#include <string.h>
int main()
{
char word[20];
bzero(word,20);
printf("请输入你要打印的内容:");
scanf("%s",word);
printf("%s\n",word);
return 0;
}
开始测试:
可以看到能够正常的打印出来字符串,接下来我们加入空格会怎么样?
这怎么回事?后面的boy呢?
再看下面的代码
#include <stdio.h>
#include <string.h>
int main()
{
int word[5];
bzero(word,5);
printf("请输入你要打印的内容:");
for(int i=0;i<5;i++)
scanf("%d",&word[i]);
for(int i=0;i<5;i++)
printf("%d",word[i]);
return 0;
}
开始测试:
欸,为什么数字就可以呢?
多次尝试之后发现,在输入字符串数组时候遇到空格就不会写入后面的数据,而整数数组,字符数组依旧能够正常输入;
查阅资料:scanf是以删除的方式,从缓冲区拿数据(stdin输入的数据存在缓冲区),当缓冲区为空时候阻塞,等待用户操作,读取数据后返回继续运行;
猜测:那么会不会是因为字符串数组输入就进行一次,hi boy其实都在缓冲区,只是它只读取一次,遇到空格就跟遇到了回车符一样停了,所以把boy留在了缓冲区了呢?
总结:scanf函数从stdin读取数据写入字符串时候遇到空白符(空格,回车)就停了;
以上内容只是个人经验,有错误还请指出,多多留言ddd~~~