这种函数多的程序把各个函数的功能看明白然后合在一起在看就容易了。
按照出现顺序一个一个看,exptab()这个函数的目的就是将制表符,换成同等位置的空格,这么做的目的是因为有个制表符的话会直接到制表符终止位,又因为题目会在最后一个非空格符之后进行折行。而制表符会被折到下一行。所以要换成空格怎么折都没事。
pos < MAXCOL这是最大值所以不能超过,pos % TABINC != 0;还不能在制表符终止位,制表符只到制表符终止位为止,所以到制表符终止位就可以了。
如果空格全部打印后没到折行的长度就返回相应的长度并结束此函数,然后while循环体再一次循环,将读取的字符赋值给字符数组line。这里我有一个疑问就是为什么不是判断pos是否等于MAXCOL,什么情况下pos会大于MAXCOL? 这里的情况应该是等于。如果到了折行的位置,调用函数printfl将其依次打印出来然后最后输出换行符。
然后遇到换行符就直接调用函数printfl打印,因为下面有一个限制条件让pos不会超过MAXCOL,
最后的条件是输出的这个字符不是换行符和制表符并且达到了折行的长度。
首先执行findblnk函数找空格,因为这最后一个字符有可能是空格,
循环体从最后的位置依次向前判断是否是空格。然后如果判断到最后pos == 0的是否还是没有找到空格,那么就证明这一行里没有空格然后返回这一行的行长,并向下传递给printl函数将其打印,而如果发现有空格将当前位置加一后的值返回,原因是已经预先减过了,后面学了后自增自减就可以省去这个。
然后就是找到新的行中的位置。
如果pos的位置是最开头(0 因为上面已经有函数会重置pos位置的情况)和最末尾,那么都将从最开始继续计数。而如果美在这两个位置,就会将字符数组当前位置pos一直到最后的字符赋值给字符数组的最开头然后将i的数值返回就是新的位置。
这个我理解的好像有错的地方等有时间再来改一下。
练习1-22
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...