A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 脸皮猴 高级黑马   /  2014-2-24 17:33  /  2069 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 脸皮猴 于 2014-2-26 08:58 编辑

相信大家下载了有很多同学都一起下载了基础测试题了,我也是。在基础测试中,有好几个地方可能会用到scanf和gets这两个函数,但是我在用scanf和gats一起用的时候却出现了问题。以前还真没注意,请看下面程序int main(int argc, char *argv[])
{
  int a;
  char *b;
  //初始化b
  b = (char *)calloc(1,50*sizeof(char));
  printf("请输入一个数字:");
  //输入一个数字
  scanf("%d",&a);
  printf("请输入一个字符串:");
  //给b输入一个字符串
  gets(b);
  printf("刚刚输入的数字是:%d刚刚输入的字符串是%s\n",a,b);
  //释放b的内存
  free(b);
  return 0;
}

上面的程序看似没问题吧·我运行一遍·并且输入15按下回车·还没等我输入字符串,整个程序就完了。看下图


为什么会出现这种情况勒···原来是因为gets函数是接收了输入缓存中的回车。我看到网上有人这么写可以避免·在scanf后面跟上下面一句。
        scanf("%d",&a);
        while(getchar()!='\n')
        continue;
这样子上面那个程序就能正常输入数字和字符串了。


我不知道我分析的对不对。。还有童鞋们有更好的方法避免这种情况吗?




评分

参与人数 2技术分 +1 黑马币 +2 收起 理由
chay0103 + 2 赞一个!
jing迪 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
嗯 也是 我也遇到过这种问题,感谢楼主分享
回复 使用道具 举报
chay0103 发表于 2014-2-25 19:47
嗯 也是 我也遇到过这种问题,感谢楼主分享

{:2_36:}共同学习和进步!加油!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马