本帖最后由 脸皮猴 于 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;
这样子上面那个程序就能正常输入数字和字符串了。
我不知道我分析的对不对。。还有童鞋们有更好的方法避免这种情况吗?
|