今天在学习c的时候突然对一个常用的函数产生了疑问,越想越糊涂,请大佬指教,谢谢
#include <stdio.h>
#include <string.h>
char *s_gets(char *st,int n)
{
char *ret_val;
char *find;
ret_val=fgets(st,n,stdin);
if(ret_val)
{
find=strchr(st,'\n'); //查找换行符
if(find) //如果地址不是NULL
*find='\0'; //在此处用空字符取代换行符
else
while(getchar()!='\n') //疑问点
continue;
}
return ret_val;
}
以上是c prime plus中的一段代码。
我的理解是fgets成功读取后自动添加换行符,那find就一定不是NULL,那么else后面的代码什么时候会执行?有什么作用?
博客讨论了C语言中自定义函数s_gets的实现,该函数用于从标准输入读取字符串并移除末尾的换行符。当fgets成功读取字符串后,函数通过查找换行符并将其替换为NULL来完成处理。疑问在于else部分的代码何时执行,这部分代码用于处理fgets未能在指定长度内找到换行符的情况,确保通过getchar()逐字符读取直到遇到换行符,从而清理输入缓冲区。
2424





