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

CS50可读性实验代码计算s_avg始终为0问题求助

问题原因

核心是C语言的整数除法规则导致的计算错误:

  • C语言中两个int类型变量做除法时,会直接截断小数部分,仅保留整数结果
  • 通常输入文本的句子数sentences远小于单词数words,因此sentences/words的结果会直接被截断为0,乘以100后s_avg自然始终为0,同理l_avg也存在精度丢失的问题。

修复方案

将除法运算的其中一个操作数强制转换为浮点类型,再进行计算,同时用浮点类型存储平均值即可:

// 把原来计算l_avg、s_avg的两行替换为以下代码
float l_avg = ((float)letters / words) * 100;
float s_avg = ((float)sentences / words) * 100;

额外优化建议

你代码中判断字符的逻辑可以用ctype.h提供的标准函数简化,可读性更强,也避免手写ASCII码出错:

  • 判断字母可以用isalpha(text[i]),代替手动判断大小写字母的ASCII范围
  • 判断空格可以用isspace(text[i]),代替判断ASCII 32
  • 标点判断也可以直接写字符字面量text[i] == '.'、text[i] == '!'、text[i] == '?',比写ASCII码更易读。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:30:01