免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: meastzh
打印 上一主题 下一主题

K&R的书中1.9一道例题不解,恳请赐教 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2012-06-19 09:33 |只看该作者
其实这么做就只有一个目的,就是保留以\n结尾的行的\n,按照判断条件在循环体内是不会保存\n的。
如果把这个
if( c == '\n'){
        s[i] = c;
        ++i;
}放在循环体内处理,也可以,那就要在这个if块里加上break以跳出循环,要不然就不能违背了这个函数
原有的目的“字符串达到指定长度或遇到\n返回字符串“

论坛徽章:
0
12 [报告]
发表于 2012-06-19 09:45 |只看该作者
本帖最后由 KBTiller 于 2012-06-19 09:55 编辑

回复 11# tobylee945


    你的意思是像这样?
  1. int getline(char s[],int lim)
  2. {
  3.     int c,i;

  4.     for( i = 0 ; i < lim - 1 && (c = getchar()) != EOF  ; ++ i ){
  5.          s[i] = c;
  6.          if( c == '\n' ){
  7.             ++i;
  8.             break;
  9.          }
  10.     }
  11.    
  12.     s[i] = '\0';
  13.     return i;
  14. }
复制代码
看起来比K&R的要晦涩一点
而且还多了一行

论坛徽章:
0
13 [报告]
发表于 2012-06-19 10:11 |只看该作者
他应该说的是这个意思,但是功能是一样的回复 12# KBTiller


   

论坛徽章:
0
14 [报告]
发表于 2012-06-19 10:12 |只看该作者
回复 12# KBTiller


    他应该是这个意思。

论坛徽章:
0
15 [报告]
发表于 2012-06-19 10:25 |只看该作者
回复 12# KBTiller


    是这个意思。
    这是告诉楼主这样也可以。
    如果是我写,会像8楼说的那样,写成if (c=='\n') s[i++] = c;

论坛徽章:
0
16 [报告]
发表于 2012-06-19 10:47 |只看该作者
本帖最后由 blackuhlan 于 2012-06-19 10:47 编辑

把输入的换行读入,防止函数重复调用时,不能往下读。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP