C Primer Plus 自定义函数 s_gets
#代码源码
char *s_gets(char *st,int n)
{ char *ret_val; //
char *find;
ret_val = fgets(st,n,stdin);//从stdin流中获得字符
if(ret_val)
{
find = strchr(st,'\n'); //如果获得的字符串是小于n-1的,找到'\n'
if(find)
*find = '\0'; //把'\n'换成'\0'
else
while(getchar()!='\n') // 把缓冲区剩余的字符刷新掉
continue;
}
return ret_val;
}
代码分析
因为fgets 只能获取n-1个字符,当读取n-1个字符或者读取到换行符,会就会停止,
当输入的字符大于n时,要用wile(getcahr()!= ‘\n’),处理处理留在缓冲区中的字符,
使用一个 string.h 库中的strch来快速找到一个字符(’\n’),并把位置返回给 find 指针