免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2482 | 回复: 15
打印 上一主题 下一主题

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-06-18 22:10 |只看该作者 |正序浏览
1.9字符数组中
  1. int getline(char s[],int lim)
  2. {
  3.     int c,i;
  4.     for(i = 0;i < lim - 1 && (c = getchar()) != EOF && c != '\n';++i)
  5.       s[i] = c;
  6.     if( c == '\n'){
  7.         s[i] = c;
  8.         ++i;
  9.    }
  10.     s[i] = '\0';
  11.     return i;
  12. }
复制代码
为什么不把
  1. if( c == '\n'){
  2.         s[i] = c;
  3.         ++i;
  4.    }
复制代码
加入for循环体中,把c != '\n'去掉

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

把输入的换行读入,防止函数重复调用时,不能往下读。

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


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

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


    他应该是这个意思。

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


   

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

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
10 [报告]
发表于 2012-06-18 23:58 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
9 [报告]
发表于 2012-06-18 23:57 |只看该作者
回复 8# pmerofc
原文摘抄,多谢大师指点,小弟我消化一下

   

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
8 [报告]
发表于 2012-06-18 23:53 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP