C语言美元转其他货币程序转换后货币求和错误求助
问题排查与修复
核心问题
你计算转换后货币总和时出错,是因为**ils数组的第9个索引(ils[9])未被初始化**,属于内存中的随机垃圾值,每次运行时该值不确定,导致总和计算结果错误且不稳定。
具体分析
- 在
dollar_to_shekel函数中,循环范围是i=1到i<SIZE(即i从1到9),仅给ils[0]到ils[8]赋值,ils[9]完全未处理,内存中保留随机垃圾数据。 - 调用
sum_array(0, ils)时,函数会从索引0遍历到SIZE-1(即9),把未初始化的ils[9]也计入总和,因此结果每次都不同且错误。 - 美元数组
usd的所有元素均由用户输入初始化,无未赋值元素,因此总和计算正确。
修复方案
提供两种简单可行的修复方式:
方式1:限制sum_array的遍历范围
修改sum_array函数,增加结束索引参数,只累加ils数组的有效元素:
// 修改sum_array函数 float sum_array(int start, float arr[], int end) { int i; float sum = 0; for(i=start; i<end; i++) { sum += arr[i]; } return sum; }
同步更新头文件中的函数声明:
float sum_array(int, float[], int);
最后修改main函数中的调用代码,只计算ils数组前9个元素的总和:
printf("%.2f %.2f\n", sum_array(1,usd, SIZE), sum_array(0,ils, SIZE-1));
方式2:初始化ils数组所有元素
在main函数定义ils数组时,直接将所有元素初始化为0:
float ils[SIZE] = {0};
此时即使ils[9]未被赋值,其值为0,不会影响总和计算,原有sum_array函数无需修改。
额外优化建议
- 输入环节可以增加提示,明确告知用户需要输入10个数字(1个汇率+9个美元数值),避免输入错误。
- 打印表格时用
\t代替多个空格,排版更整齐:
printf("$ \t\t IS\n"); printf("%.2f \t\t %.2f\n", usd[i], ils[i-1]); printf("%.2f \t\t %.2f\n", sum_array(1,usd), sum_array(0,ils));
内容的提问来源于stack exchange,提问作者ramimamedov
相关产品推荐
相关产品推荐

