gpt4 book ai didi

c - K&R 练习 1.16 - 线长限制

转载 作者:太空狗 更新时间:2023-10-29 16:35:44 25 4
gpt4 key购买 nike

我正在从 K&R 的“The C Programming Language”一书中学习 C。我正在做书中指定的练习。我在练习 1.16,但我不明白。

练习 1.16:

Revise the main routine of the longest-line program so it will correctly print the length of arbitrarily long input lines, and as much as possible of the text.

我的问题:

  1. “...尽可能多的文本...” - 字符串长度是否有限制?也许在标准标题中有一个变量具有字符串长度的最大允许值?

  2. “...任意长输入行的长度...” - 但在代码中 MAXLINE 被定义为 1000。它的大小也是有限的。我看到了一些解决方案 here , 但在我看来这不是解决方案决定,因为前者对行的长度(1000 个字符)有限制。

可能是我没看懂任务。我的理解是我必须取消 1000 个字符的限制。

最佳答案

这是 K&R 的早期练习,您应该只对代码做一些小的更改,而不是完全重新设计代码。

  1. "...as much as possible of the text..."

    由您来解释。我会通过打印存储在 longest 缓冲区中的内容来实现。即最多打印出该行的 1000 个字符。同样,这是一个早期练习,几乎没有介绍动态分配的内存。在编写 K&R 的时候,存储任意长的文本行并不像今天这样可行。

  2. "...the length of arbitrarily long input lines..."

    是硬性要求。无论长度多长,您都应该找到正确的长度(至少在 int 的范围内。)

解决这个问题的一种方法是:

  • 调用 getline() 后,检查读入 line 缓冲区的最后一个字符是否为换行符 ('\n')
  • 如果是,您将阅读整行。 len变量是行的正确长度(getline()的返回值,与原始代码相比不需要特别考虑。
  • 如果是not,说明你没有读整行,需要寻找这一行的结尾。您添加一个 while 循环,调用 getchar() 直到它返回换行符(或 EOF),然后计算您在该循环中读取的字符数。只需执行 len++ 即可计数。
  • while 循环完成后,新的 len 现在是该行的实际长度,但我们的缓冲区只有它的前 999 个字符。
  • 和以前一样,如果该行是目前为止最长的,您将存储(copy() 函数调用)当前 缓冲区(最多 1000 个字符)。
  • 完成后,您将像以前一样打印出存储的行(longest 缓冲区)和长度的max 变量。
    • 由于上面提到的 while 循环,max 长度现在是正确的。
    • 如果 longest 行确实超过 1000 个字符。您至少打印出前 999 个字符 - 这是“尽可能多的”。

我不会破坏它并发布您完成此操作所需的代码,但您只需添加 6 行代码即可添加到练习 1-16 的最长行程序中。

关于c - K&R 练习 1.16 - 线长限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15119756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com