s_gets()函数的总结

对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

猜你喜欢

转载自blog.csdn.net/weixin_40836227/article/details/82824584