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

为何程序中空格未被识别?K&R C习题代码问题求助

问题分析与解释

你的代码出现两个核心问题,直接导致输出不符合预期:

1. 循环与if语句的范围错误(最关键原因)

C语言中,while或if语句如果没有用大括号{}包裹代码块,只会执行紧跟其后的第一行代码。你的代码结构实际等价于:

int main(){
    int c;

    while((c = getchar()) != EOF) {
        if (c != ' ')
            putchar(c);
    }
    // 以下代码在循环结束后才会执行,此时c是EOF,永远不会触发有效操作
    if (c == ' ')
        printf('test');
    putchar(c);
}

也就是说,判断空格的if语句和后续的putchar(c)根本不在循环体内,只会在输入结束(遇到EOF)时执行一次。而此时c的值是EOF,既不满足c == ' '的条件,也无法输出有效字符——这就是输入的空格完全被忽略、只输出非空格字符ABCD的原因。

2. printf的参数错误

printf的第一个参数要求是字符串常量,必须用双引号"test"包裹,但你用了单引号'test'。单引号仅用于表示单个字符常量,多字符常量(如'test')属于C语言的未定义行为,编译时会报错或产生不可预期的结果,直接导致你的printf语句无法正常输出test。

修正后的示例代码

如果要实现你预期的输出(每个空格前输出test并保留空格),代码应调整为:

int main(){
    int c;

    while((c = getchar()) != EOF) {
        if (c != ' ') {
            putchar(c);
        } else {
            printf("test");
            putchar(c);
        }
    }
    return 0;
}

输入A B C D时,这段代码会输出Atest Btest Ctest Dtest。如果要完成K&R习题的原始要求(将连续空格替换为单个空格),则需要额外记录前一个字符是否为空格,避免连续输出空格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 17:42:08