You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

K&R C语言练习1-16仅修改main函数的实现是否符合要求问询

K&R 练习1-16 实现方案评价

核心结论

你的方案属于合法的解题方案,完全满足题目限定的「仅修改main函数、不改动外部函数内部逻辑」的要求,核心统计逻辑自洽,但存在少量可优化的点。


合规性说明

  • 完全符合题目限制:你没有修改get_line1函数的任何内部实现,所有调整都集中在main函数范围内,满足题目的前置约束。
  • 核心功能达标:
    • 可以正确统计任意长度的输入行长度,不受MAXLINE取值限制,你将MAXLINE设为2、通过分段读取累加长度的思路是可行的,成功绕过了固定缓存大小的限制。
    • 带换行的奇数/偶数长度输入行都可以正确统计长度,逻辑没有矛盾。

可优化点

  1. 缺少文本打印逻辑:题目要求除了打印行长度外,还需要「尽可能多的打印文本内容」,你的当前实现仅输出了长度,没有输出读取到的行内容,可以在每次调用get_line1拿到分段内容后,直接打印line数组,即可满足这一要求。
  2. 边界场景缺陷:如果输入的最后一行没有以\n结尾、直接到EOF结束,你的代码不会打印这一行的长度,也不会将其计入全文总长度,可以在while循环结束后补充判断逻辑修复该问题。

优化后main函数参考

int main()
{
    int len;
    int max = MAXLINE;
    char line[MAXLINE];
    int tot = 0;
    int text_l = 0;

    while ((len = get_line1(line, max)) > 0) {
        printf("%s", line); // 打印分段读取到的内容,满足尽可能输出文本的要求
        if (line[len - 1] != '\n') {
            tot += len;
        } else {
            printf("当前行长度:%d\n", tot + 1);
            text_l += tot + 1;
            tot = 0;
        }
    }
    // 处理最后一行无换行的边界场景
    if (tot > 0) {
        printf("\n最后一行长度:%d\n", tot);
        text_l += tot;
    }
    printf("全文总长度:%d\n", text_l);
    return 0;
}

内容的提问来源于stack exchange,提问作者PwNzDust

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 04:36:06