【问题标题】:K&R2, exercise 1-16; what is the assignment? [duplicate]K&R2,练习 1-16;什么是任务? [复制]
【发布时间】:2014-04-15 20:08:17
【问题描述】:

我正在阅读 Kernighan 和 Ritchie 的 The C Programming Language, Second Edition,但在理解练习 1-16 中作业的性质时遇到了问题。我已经读了很多遍,但无法弄清楚他们到底在问我什么;原谅我,但英语不是我的第一语言。

练习说明是:

修改最长行程序的主程序,使其能够 正确打印任意长输入行的长度和尽可能多的长度 尽可能的文字。

这是否意味着程序在最长行的长度方面不再受MAXLINE 字符串的限制,或者它希望您单独打印每一行的长度?如果是后者,它是想让你在输入每一行之后打印它的长度还是只打印长度?

我提出的两个选项完全不同,因此我非常感谢一些建议。

【问题讨论】:

  • 它希望你打印任意输入行的长度。另外,尽可能的文字。 IE。达到 MAXLINE 字符串限制。
  • 这意味着您应该能够跟踪最长行的长度,即使它是 1 KiB、2 KiB、4 KiB 等,但您只需要能够打印部分行(例如,前 256 个字符左右)。特别是,您不应该仅仅因为它太长而无法放入缓冲区而在中间换行。
  • 谢谢大家的澄清。我误解了这个问题,最终试图让程序打印任何行,而不管长度如何。我遇到了困难,所以我查找了一个示例答案,发现他们正在做一些完全不同的事情。

标签: c kernighan-and-ritchie


【解决方案1】:
  1. 这是否意味着程序不应再受 MAXLINE 字符串限制?

不,它没有。在本书的这一点上,你不应该知道如何处理和存储任意长度的行。第 1 章是对 C 的非常肤浅的介绍,不希望你重新设计整个代码。

记住这一点:练习要求您尽可能多地打印该行,即,如果该行长于 MAXLINE 个字符,您只需打印第一个 MAXLINE但是您还应该打印原始行的长度。换句话说,您可以存储尽可能多的 MAXLINE 个字符,但您在超出该限制后继续阅读只是为了计数。

为此,必须更新getline() 函数以继续计数字符直到行尾,即使它达到缓冲区的限制,在这种情况下它会计数但它 显然不会将文本写入缓冲区。

【讨论】:

  • 请注意,该作业只要求修改主例程,有些人认为根本不应该更改 getline 和 copy 函数。
猜你喜欢
  • 1970-01-01
  • 2013-06-30
  • 1970-01-01
  • 2020-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-21
相关资源
最近更新 更多