gets与scanf的冲突

来源:百度知道 编辑:UC知道 时间:2024/06/06 08:48:02
main()
{
int n;
char str[32];
scanf("%d",&n);
gets(str);
.......
.......
}
为什么调试的时候只能输入一次?
main()
{
int n;
char str[32];
gets(str);
scanf("%d",&n);
.......
.......
}
但是这样又可以了
一定要先输n再输字符串呢?

scanf不读'\n',所以scanf玩了以后'\n'还在缓冲区里,而gets则是以'\n'为结束标志,它看到'\n'就把它痛快地读掉了,其实什么都没读到,解决方法:

main()
{
int n;
char str[32];
scanf("%d",&n);
while(getchar()!='\n'); // 清缓冲
gets(str);
.......
.......
}

第一个输入数字后并回车后你的回车符会被送到gets,所以没用
而第二个就不会,因为接收的是整形而回车是字符型所以不会,