> 文档中心 > C-------------使用scanf输入字符串的故事;

C-------------使用scanf输入字符串的故事;

scanf是位于我们标准库内的一个输入函数,初学C经常会用到:

格式:scanf("%..",&...),

前面是输入类型,后面是输入内容的地址;

看以下代码;

#include

#include

int main()

{

  char word[20];

  bzero(word,20);

  printf("请输入你要打印的内容:");

  scanf("%s",word);

  printf("%s\n",word);

  return 0;

}

开始测试:

 可以看到能够正常的打印出来字符串,接下来我们加入空格会怎么样?

 这怎么回事?后面的boy呢?

再看下面的代码

#include

#include

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~~~

 

C-------------使用scanf输入字符串的故事; 与50位技术专家面对面 C-------------使用scanf输入字符串的故事; 20年技术见证,附赠技术全景图素描网