gets()是用来输入一个字符串的,与scanf不同但又可以取代。
get()可以一次性输入一串字符还可以存入空格;而scanf只能输入一个字符。
并且使用 gets() 时,系统会将最后“敲”的换行符’\n‘从缓冲区中取出来,然后丢弃,所以缓冲区中不会遗留换行符。这就意味着,如果前面使用过 gets(),而后面又要从键盘给字符变量赋值的话就不需要吸收回车清空缓冲区了,因为缓冲区的回车已经被 gets() 取出来扔掉了。
我们用代码来说明一下吧:
# include <stdio.h>
#include<string.h>
int main(void)
{
char str[30];
char ch;
printf("请输入字符串:");
gets(str);
//scanf("%c",str);
printf("%s\n",str);
scanf("%c", &ch);
printf("ch = %c\n", ch);
return 0;
}
以上这是使用了gets()。
# include <stdio.h>
#include<string.h>
int main(void)
{
char str[30];
char ch;
printf("请输入字符串:");
//gets(str);
scanf("%c",str);
printf("%s\n",str);
scanf("%c", &ch);
printf("ch = %c\n", ch);
return 0;
}
以上这是用了scanf的结果。
可以看出,我们在使用scanf时,第一次输入一个字符后,我们敲出了换行的行为,'\n'就被存入了缓冲区,相当于第二次输入字符时,输入的时'\n'. 所以我们要用getchar() 清空缓冲区。
而我们使用gets()时,系统会自动将'\n'扔掉了。