1.16 修改打印最长文本行的程序的主程序main,使之可以打印任意长度的输入行的长度,并尽可能多地打印文本。

1. 打印任意长度的输入行的长度 ,是指这个输入行的长度不受限制,刚开始想到两种方法:

   * 动态输入数组的大小

  * 用malloc函数

  好像这样 都没有实现。

  后来看了源代码才理解了,数组的长度一定,当数组读入字符读满停止了读字符,但是行可以继续读啊  这里有点不明白了。

还有就是尽可能多的打印文本,就是把存储在数组的字符打印出来。

int getline(char s[], int lim)
{
 int c, i, j;
 j = 0;
 for (i = 0;/*i < lim-1 &&*/ (c = getchar()) != EOF && c !='\n'; ++i)
     if(i < lim - 2)   //这里为何  i < lim - 2 没有想明白?
    {
      s[j++] = c;
    }
    if(c == '\n')
    {
       s[j++] = c;
        ++i;
     }
 s[j] = '\0';
 return i;
}


 这里做了两处修改:

1. 循环语句 ,不再检查字符数是否超出数组s的限制,getline能返回任意长的输入行的长度并能存储尽可能多的输入行内容。

2. 用于判断字符串数组是否还有空位置的表达式

  改成了 if(i  < lim - 2) 

  原因是  数组s的最后一个小标是 lim-1  数组s中有lim个元素且我们已经读去了输入的字符。

 i < lim -2 是将数组s里给换行符留个位置,即 s[lim - 2] = '\n';

还要给字符串结束符留出一个位置,即s[lim -1] = '\0'.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值