CS50 Week4滤镜作业:灰度化结果不符及输出匹配疑问
CS50 Filter Grayscale任务问题解析
问题1:计算结果为27而非预期28
- 核心原因是整数截断而非四舍五入。CS50的灰度转换要求将RGB三通道的平均值四舍五入到最近整数,如果你直接用
int()强制转换浮点数结果,或是使用整数除法(比如C语言中(r+g+b)/3,当r/g/b为整数时会直接执行整数除法),会直接舍弃小数部分。比如当平均值是27.5或更高时,截断后得到27,但正确的四舍五入结果应为28。 - 修正方式:用
round()函数对平均值做四舍五入处理,确保得到最接近的整数。
问题2:输出内容看似一致但提示不匹配
- 别被截断的字符串显示误导,实际差异来自两个可能:
- 像素数值连锁错误:前面的27/28差异会让后续输出序列和预期完全不符,只是提示仅展示了开头部分,看起来相同。
- 输出格式问题:比如每行末尾的多余空格、换行符格式(Windows的
\r\n和Unix的\n不兼容),或是像素数值间的空格数量不符合要求。例如某像素后多了一个空格,或是最后一行未正确换行。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

