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

C语言getchar循环后printf输出异常求助(K&R习题1-13)

《C程序设计语言》习题1-13问题排查

核心问题可能的几个方向

  • 统计逻辑漏执行
    要么输入结束的判断写错了(比如没处理EOF,或者循环条件直接不成立),导致整个统计代码块根本没跑;要么单词结束时的统计步骤缺失——比如遇到空格/换行时,只重置了当前单词长度计数器,没把长度值更新到统计数组里。
  • 数组操作错误
    统计单词数量的数组没初始化全0,或者索引计算错了(比如用长度值直接当索引,导致越界或者只修改了第一个元素);还有可能输出时只遍历了数组的第一个元素,所以只打出一个0。
  • 收尾逻辑缺失
    输入结束时如果最后一个单词后面没有空白字符,这个单词的长度根本没被统计进去,直接导致结果不全。

修正后的参考代码

#include <stdio.h>

int main() {
    int curr_len = 0;
    // 假设统计1-10字符长度的单词,数组初始化全0
    int len_counts[10] = {0};
    int input_char;

    // 循环读取直到输入结束
    while ((input_char = getchar()) != EOF) {
        if (input_char != ' ' && input_char != '\n' && input_char != '\t') {
            curr_len++;
        } else {
            // 仅当当前有有效单词长度时统计
            if (curr_len > 0 && curr_len <= 10) {
                len_counts[curr_len - 1]++;
                curr_len = 0;
            }
        }
    }
    // 处理输入结束时未统计的最后一个单词
    if (curr_len > 0 && curr_len <= 10) {
        len_counts[curr_len - 1]++;
    }

    printf("RESULTS:\n");
    // 遍历输出所有长度的统计结果
    for (int i = 0; i < 10; i++) {
        printf("单词长度%d: %d\n", i + 1, len_counts[i]);
    }
    return 0;
}

必查验证点

  • 输入结束要按对应系统的EOF组合键(Windows是Ctrl+Z,Linux/macOS是Ctrl+D),确保程序触发统计收尾
  • 检查统计数组的索引是否对应正确:比如长度1的单词对应数组下标0,避免越界或错位
  • 输出循环要覆盖所有你要统计的长度范围,别只循环一次输出第一个元素

内容的提问来源于stack exchange,提问作者最白目

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 23:35:17