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

K&R习题程序空格、制表符计数异常及EOF使用问题求助

问题解答:K&R习题统计字符与ChromeOS Linux环境问题

一、代码统计错误的修复

你的代码核心问题是switch语句的case未添加break,导致代码贯穿执行:

  • 匹配到'\n'时,执行lines++后会继续执行blanks++和tabs++
  • 匹配到' '时,执行blanks++后会继续执行tabs++
    这直接导致空格、制表符计数严重失真,甚至出现异常大的数值。

修正后的代码:

#include <stdio.h>

int main(void)
{
    int input = 0;
    int blanks = 0;
    int tabs = 0;
    int lines = 0;

    while((input = getchar()) != '*')
    {
        switch(input)
        {
            case '\n':
                lines++;
                break;
            case ' ':
                blanks++;
                break;
            case '\t':
                tabs++;
                break;
            default:
                break;
        }
    }
    printf("BLANKS:%i TABS:%i LINES:%i\n", blanks, tabs, lines);
    return 0;
}

修正后,输入你提供的示例内容会得到正确统计:换行1次、空格3个、制表符2个,输出为BLANKS:3 TABS:2 LINES:1。

二、ChromeOS Linux环境下EOF与Ctrl+Z的问题

  1. EOF终止程序的正确操作:
    Linux环境下发送EOF的快捷键是Ctrl+D,而非Windows的Ctrl+Z。你之前用Ctrl+Z只是将程序暂停并放到后台,并未终止,因此程序不会执行后续的统计输出。改用Ctrl+D发送EOF,程序会正常结束循环并执行printf代码。

  2. 恢复被Ctrl+Z暂停的程序:

  • 输入fg命令,可将后台暂停的程序调回前台继续运行
  • 输入bg命令,可让程序在后台继续运行
  • 输入jobs命令,可查看当前后台的程序列表

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 12:16:09