为了账号安全,请及时绑定邮箱和手机立即绑定

关于scanf函数的问题

关于scanf函数的问题

C
慕牧羊6158366 2018-06-25 19:07:49
#include<stdio.h>int  main(){ int a;char b; scanf("%d",&a); scanf("%[^.]",&b); printf("%d",a); printf("%c1",b); return 0; } 请问为什么我这个代码中的a得不到正确的结果,如:输入6回车输入.回车最后得到得结果为a=0;这是什么原因?
查看完整描述

1 回答

已采纳
?
onemoo

TA贡献883条经验 获得超454个赞

原因是用 %[] 的那句 scanf 用错了。

%[] 这个格式化指示符对应的其实是字符串,而非字符。或者说,它在匹配结束后,会再存一个 null 字符进去(用于构成字符串结尾)。


代码中你错误地只用一个字符去接收 %[] 的匹配结果,而最后的 null 字符仍会被写到 b 的后面,这样就写越界了。


至于为什么你看到 a 的结果为 0?  很可能在你编译出的程序中 a 的内存位置刚好在 b 后面,所以 a 中的结果被覆盖了。

查看完整回答
反对 回复 2018-06-26
  • 1 回答
  • 0 关注
  • 758 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信