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') //这里还不懂。getchar()get的是哪个字符?似乎是get剩余的字符,但为什么呢?(10.12)
     continue;
  }
  return ret_val;
}

还是想不懂else while的代码,先记录着吧。《C Primer Plus》P331-334

  • 13
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值