对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