如果对s1先后使用了scanf()和getchar()来赋值,中间应该加上while(getchar()!=’\n’),目的是清空缓存区
#include <stdio.h>
#include <stdlib.h>
int main()
{
char s1[100];
printf("用scanf输入字符序列s1\n");
scanf("%s",s1);
printf("%s\n",s1);
while(getchar()!='\n')
printf("用gets输入字符序列s1\n");
gets(s1);
printf("%s",s1);
}

但是,如果把这句话去掉
#include <stdio.h>
#include <stdlib.h>
int main()
{
char s1[100];
printf("用scanf输入字符序列s1\n");
scanf("%s",s1);
printf("%s\n",s1);
printf("用gets输入字符序列s1\n");
gets(s1);
printf("%s",s1);
}

出现这样的情况,是因为调用函数gets()的时候缓存区还有一个’\n’,非空,也就不期待用户输入,就把它当做终端的输入值了。
scanf与gets的缓存冲突
探讨了在C语言中,当使用scanf()和gets()函数连续读取字符串时,为何需要清空输入缓冲区,避免gets()提前读取到前一个操作留下的换行符,确保用户输入正确接收。
6989





