对s_gets()这个函数不熟,每次回顾都总有地方不懂
char *s_gets(char *st,int n){
char *ret_val;
int i=0;
ret_val=fgets(st,n,stdin);
if(ret_val){//与*ret_val!='\0'相同,当ret_val指向空字符时,ret_val的值是0,即测试条件为假,while循环结束
while(st[i]!='\n'&&st[i]!='\0')
i++;
if(st[i]=='\n')
st[i]='\0';
else //如果检测到结束标志'\0',则读取但不储存输入,包括\n。
//丢弃的目的,不让多出来的留在缓冲区,保证了读取语句与键盘输入同步
while(getchar()!='\n')
continue;
}
return ret_val;
}
如果fgets()返回NULL,说明读到文件结尾或出现读取错误,s_gets()函数跳过了这个过程。效果:如果字符串中出现换行符,就要空字符替换它;
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;
}
还是想不懂else while的代码,先记录着吧。《C Primer Plus》P331-334