★C语言 关于scanf输入字符串的问题

有以下程序段charname[20];intnum;scanf("name=%snum=%d",name;&num);当执行上述程序段,并从键盘输入:name=Lilin... 有以下程序段
char name[20];int num;
  scanf("name=%s num=%d",name;&num);
  当执行上述程序段,并从键盘输入:name=Lili num=1001<回车>后,name的值为A
A Lili B name=Lili C Lili num= D name=Lili num=1001

输入空格是不是代表字符串结束了?帮忙详细解答一下此题 谢了
展开
 我来答
明阿哩05
推荐于2017-09-04 · TA获得超过268个赞
知道答主
回答量:417
采纳率:0%
帮助的人:260万
展开全部
name=%s num=%d 它会按照你的格式来进行接收字符串到 一个内存地址中,但这个地址并不是 你定义的 name[20] 和 num ,而是 stdin 这个结构体中 _base 成员 指向的数据区,这个数据区叫 做 输入缓冲出,同理 还有 输出缓冲区 :stdout._base 。 scanf 会接收 全部信息(是你格式中定义的,如 name= num= 当然还有一个空格)也就是说 这些东西都要输入,把这些信息接收到 stdin._base里面,然后再 比较数据与已经定义的格式 name=%s num=%d 的匹配情况,将相应的值 再分配到 自己定义的缓冲区中。

你的问题 是 输入空格是不是代表字符串结束了?
scanf 里面 一般来说是不接收空格的,但是有例外 ,如 你上面的例子,在格式控制里 有 空格,接收的时候 它就占一个 位置,也就是你按空格的时候 它在之后会和 你定义的格式控制里的空格匹配。
追问
如果是这样一个程序段:
scanf("%s%s",a,b); //a、b为数组名//

为了把两个字符串隔开 输入的时候要在中间加空格还是回车?
追答
空格  或回车都可以啊。。。不是说了嘛 scanf  不接 收空格  和回车 和TAB,也就是你按下这几个键 就表示 一个数据项输入完成。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式