C++数组中销量最高/最低商品输出异常求助:结果错误或为空
解决销量对应商品名称输出错误/为空的问题
看起来你已经找对了核心思路——通过销量数组的索引关联到名称数组,但输出出错大概率是细节处理上的问题。先把你的问题和未完成的代码整理出来:
我尝试输出数组中销量最高和最低的商品,但输出结果要么错误要么为空,找不到原因。每个商品分别对应价格数组、名称数组和销量数组。我的思路是先找出销量最低的商品,再通过其索引访问名称数组,从而输出商品名称而非最低销量数值。以下是我目前的代码:
#include "stdafx.h" #include <string> #include <conio.h> #include <iostream> // 代码未贴全
我先给你梳理几个最容易踩的坑,再给你一个完整的可运行示例:
常见错误原因
- 数组索引越界:比如初始化最值索引时用了-1,或者循环条件写错(比如
i <= 数组长度),导致访问了不存在的数组元素 - 数组长度不匹配:价格、名称、销量三个数组的元素数量不一致,索引对应关系直接错乱
- 最值初始化错误:比如把最低销量初始值设为0,如果所有商品销量都大于0,那永远找不到真正的最小值;或者初始索引没设为有效位置(比如0)
- 输出逻辑疏漏:比如输出时写错了数组名,或者没有正确处理字符串的输出
完整实现示例
下面是一个符合你需求的完整代码,你可以对照自己的代码找差异:
#include "stdafx.h" #include <string> #include <iostream> #include <climits> using namespace std; int main() { // 三个数组必须长度完全一致,一一对应 string productNames[] = {"无线耳机", "机械键盘", "鼠标垫", "电竞鼠标"}; double productPrices[] = {299.0, 399.0, 29.9, 199.0}; int productSales[] = {350, 120, 500, 280}; // 计算数组长度,避免手动输入出错 int totalProducts = sizeof(productSales) / sizeof(productSales[0]); // 先处理空数组的情况,防止后续遍历出错 if (totalProducts == 0) { cout << "没有商品数据!" << endl; _getch(); return 0; } // 初始化最值索引为第一个元素的索引(0),这是关键 int minSalesIdx = 0; int maxSalesIdx = 0; // 遍历数组,更新最值索引 for (int i = 1; i < totalProducts; i++) { if (productSales[i] < productSales[minSalesIdx]) { minSalesIdx = i; } if (productSales[i] > productSales[maxSalesIdx]) { maxSalesIdx = i; } } // 输出结果,通过索引关联名称数组 cout << "销量最低的商品:" << productNames[minSalesIdx] << ",销量:" << productSales[minSalesIdx] << endl; cout << "销量最高的商品:" << productNames[maxSalesIdx] << ",销量:" << productSales[maxSalesIdx] << endl; _getch(); return 0; }
关键注意点
- 严格保证数组长度一致:这是索引能正确对应商品的基础,添加或删除商品时,三个数组要同步修改
- 正确初始化索引:从第一个元素的索引(0)开始,不要用-1这类无效值,否则会直接触发越界错误
- 动态计算数组长度:用
sizeof(数组)/sizeof(数组[0])可以自动获取数组元素数量,避免手动计数出错 - 处理边界情况:比如数组为空的场景,提前判断可以避免程序崩溃
你可以对照这些点检查自己的代码,应该就能找到问题所在啦!
内容的提问来源于stack exchange,提问作者user5623123
相关产品推荐
相关产品推荐

