C语言自主实现round函数返回负数时输出251问题求助
问题排查结论
- 你看到的251不是取整函数逻辑错误,是Linux系统进程退出码的特性导致的:
POSIX标准明确规定进程退出码的取值范围是0~255的无符号整数,main函数返回的int值只会取低8位返回给父进程。你代码中my_round(-5.2)的计算结果是-5,有符号整数-5的8位补码对应无符号值就是251,因此echo $?得到251属于正常现象,和函数逻辑无关。
你可以直接写最简测试验证:
int main(void) { return -5; }
编译运行后查询退出码,同样会得到251。
2. 如果你要验证取整函数的正确性,不要用main返回值传递结果,可选两种验证方式:
- 临时引入stdio.h头文件调用printf打印结果(测试完成后删除相关代码即可符合作业要求),你会看到
my_round(-5.2)的输出为预期的-5; - 使用gdb调试工具打断点查看my_round的返回值,同样能得到正确的负数结果。
- 你的round取整逻辑本身是符合要求的:
正数加0.5后截断、负数减0.5后截断的逻辑,刚好匹配四舍五入、中间值向远离0方向取整的规则,正数场景测试通过,负数场景计算结果本身也没有问题。
内容的提问来源于stack exchange,提问作者Bloster
相关产品推荐
相关产品推荐

