C语言输入无法存入数组列表,printf输出索引值始终为0问题求助
问题根因
- 核心错误是格式说明符与变量类型不匹配,触发C语言未定义行为:循环变量
i为int类型,但代码中使用仅适配double类型的%lf格式符输出i,导致打印结果异常,直观表现为i数值没有增长,极端场景下还会干扰循环逻辑的正常执行。 - 额外隐患:两个数组的固定长度为10,若输入的
ingredientsAmount大于10,会触发数组越界访问,引发内存异常。
修复方案
- 将两处
printf输出i的格式符从%lf替换为适配int类型的%d。 - 可选增加输入合法性校验,避免数组越界问题。
修复后代码如下:
int main() { int ingredientsAmount; double ingredientsPrice[10]; double ingredientsWeight[10]; scanf("%d", &ingredientsAmount); // 输入边界校验,避免数组越界 if (ingredientsAmount > 10 || ingredientsAmount <= 0) { printf("输入的数量非法,有效范围为1~10"); return 1; } for(int i = 0; i < ingredientsAmount; i++) { scanf("%lf", &ingredientsPrice[i]); printf("Price stored at index %d\n", i); scanf("%lf", &ingredientsWeight[i]); printf("Weight stored at index %d\n", i); } return 0; }
内容的提问来源于stack exchange,提问作者I Y S Z
相关产品推荐
相关产品推荐

