当使用gets()和fgets()给字符数组赋值时,如果前面使用过scanf,那么scanf遗留下来的回车将会被他们取出来并赋值给该字符串,并且只能获取这个回车符,从而导致字符数组赋值失败,
#include<stdio.h>
int main(void)
{
int i;
char str[10];
scanf("%d", &i);
gets(str);
printf("%s\n", str);
return 0;
}
我们看到,输入“10”回车之后就直接退出了,根本没有机会输入字符串。下面再来看一下fgets();
#include<stdio.h>
int main(void)
{
int i;
char str[10];
scanf("%d", &i);
fgets(str, 9, stdin);
printf("%s", str);
return 0;
}
同样输入 10后就直接退出了,所以当使用gets()和fgets()给字符数组赋值时,如果前面使用过scanf,那么必须使用getchar()将回车吸收,
#include<stdio.h>
int main(void)
{
int i;
char str[10];
scanf("%d", &i);
gets(str);
printf("str = %s\n", str);
return 0;
}