读入一组文本行,打印最长的文本行

本文介绍了一段C语言代码,用于从终端读取文本行并找出并打印最长的一行。代码包含getline和copy两个函数,getline用于读取一行并返回长度,copy用于将最长行复制到指定数组。程序通过比较当前行长度与已知最长行长度来更新最长行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     源自《The C Programming Language》P29

 

     从终端读入一组文本行,并将最长的文本行打印出来

 

     代码:

 

     

 

     分析:

 

     1,  需要两个数据结构:line,longest保存当前输入行,长度最长的行,line longest均为指向大小为MAXLINE的char数组。

 

     2,  getline函数:将一行读入到line中,返回其长度。

          (a):for循环的判断条件,i < lim-1 && (c = getchar()) != EOF && c != '/n',当满足这些条件时,将从终端中的读入

                 字符放进s数组(即实参line数组)中。

          (b):Q:为什么不是i <= lim-1呢? A:字符串的结尾符必须是'/0',如果设置为i <= lim-1,在本例中则为i <= 999,

                  如果一个字符串刚好是1000个字符,当读入第1000个字符时,并且该字符不是'/n',也没到达文件尾,则符合for

                  循环的判断条件,执行s[i] = c;,此时字符数组s(相对应实参line)放满了,当跳出循环执行s[i] = '/0';时,因为

                  空间不够,产生了越界错误。

          (c):当读入'/n'时,意味着从输入中读入一行字符这个操作即将完成,此时需要做的就是将该'/n'和'/0'放入s[i]中。

          (d):当读入的字符为EOF,意味到达文件尾,输入中已经没有字符可供读入了,故再将/0'读入到s中,以形成一个字符串,

                 这个字符串被存储在字符数组s中。

 

      3,  copy函数中while判断条件:(to[i] = from[i]) != '/0' 精干简洁。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值