黑马程序员技术交流社区

标题: 关于C语言中的小问题 [打印本页]

作者: 脸皮猴    时间: 2014-2-24 17:33
标题: 关于C语言中的小问题
本帖最后由 脸皮猴 于 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;
这样子上面那个程序就能正常输入数字和字符串了。


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





作者: chay0103    时间: 2014-2-25 19:47
嗯 也是 我也遇到过这种问题,感谢楼主分享
作者: 脸皮猴    时间: 2014-2-26 08:45
chay0103 发表于 2014-2-25 19:47
嗯 也是 我也遇到过这种问题,感谢楼主分享

{:2_36:}共同学习和进步!加油!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2