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

K&R C语言练习1-18:删除全空白行实现首字符丢失问题咨询

K&R C 练习1-18 代码问题说明

练习原题

编写一个程序,移除输入每行末尾的空格和制表符,并且删除完全空白的行。

首字符截断问题根因

第一版代码的main函数中,每次调用get_line1读取完一行内容后,额外执行了一次getchar()调用,该调用会读取下一行的第一个字符且未做任何存储使用,相当于直接丢弃了该字符,因此会出现输入的There变成here、That变成hat的首字符丢失问题。

其他可优化/修复点

  • 运算符使用不规范:blank1函数中判断字符为空格或制表符的条件,使用了按位或运算符|,应替换为逻辑或运算符||,当前场景下两者运算结果一致,但语义不符合条件判断的使用规范。
  • 冗余变量可删除:代码中定义的IN、OUT宏,以及第二版main函数中声明的verso、longest、i变量均未被使用,可直接删除避免编译警告。
  • blank1函数效率可优化:当前实现需要遍历整行统计空格/制表符数量才能判断是否为空行,可调整为遍历到任意非空白(非空格、非制表、非换行)字符时直接返回0,不需要全量遍历,优化后代码如下:
int blank1(char s[], int len){
    int i;
    for (i=0; i<len; i++){
        if(s[i] != ' ' && s[i] != '\t' && s[i] != '\n'){
            return 0;
        }
    }
    return 1;
}

第二版修改正确性验证

你提交的第二版修改,移除了main函数中额外的getchar()调用,改为在get_line1中检测到EOF时返回-1,主循环通过返回值判断是否终止,已经完全解决了首字符截断的问题,当前可正常实现删除全空白行的需求。

内容的提问来源于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 23:36:05