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

C语言美元转其他货币程序转换后货币求和错误求助

问题排查与修复

核心问题

你计算转换后货币总和时出错,是因为**ils数组的第9个索引(ils[9])未被初始化**,属于内存中的随机垃圾值,每次运行时该值不确定,导致总和计算结果错误且不稳定。

具体分析

  1. 在dollar_to_shekel函数中,循环范围是i=1到i<SIZE(即i从1到9),仅给ils[0]到ils[8]赋值,ils[9]完全未处理,内存中保留随机垃圾数据。
  2. 调用sum_array(0, ils)时,函数会从索引0遍历到SIZE-1(即9),把未初始化的ils[9]也计入总和,因此结果每次都不同且错误。
  3. 美元数组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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 15:52:40