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

本文探讨了C语言中scanf函数在处理字符串和整数数组时遇到空格的情况。当处理字符串时,scanf在遇到空格会停止读取,导致空格后的数据未被写入。然而,对于整数数组,它能正确地读取包含空格的输入。通过示例代码和分析,揭示了scanf函数在读取不同数据类型时的行为差异及其可能的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值