求助:C++中所有[i]下标访问均报‘subscripted value...’错误
问题分析与修复
核心报错原因
你遇到的subscripted value is not an array, pointer, or vector错误,根源在getData()函数的返回值处理:
getData()声明返回int,实际只返回了0,完全没返回你创建的vector<int> weeklyScore。- 在
highScore()、lowScore()、ave()中,auto weeklyScore = getData();得到的weeklyScore是int类型(因为getData返回int),而非vector。对int使用[i]下标自然会报错——int不是数组、指针或vector类型,不支持下标访问。
修复步骤
修正getData的返回类型和返回值
把getData()的返回类型从int改为vector<int>,并在函数末尾返回创建好的vector:vector<int> getData() { vector<int> weeklyScore(16, 0); // 原有的输入逻辑保持不变 return weeklyScore; // 新增返回vector语句 }避免重复调用getData(优化体验)
当前代码中三个分析函数各自调用getData(),会让用户重复输入三次分数,这明显不符合需求。应该在main()中只调用一次getData(),再把结果传递给三个分析函数:// 修改highScore,接收vector参数 int highScore(const vector<int>& weeklyScore) { int high = 0; int ihigh = 0; // 提前声明并初始化ihigh for (int i = 0; i < 16; i++) { if (weeklyScore[i] > high) { high = weeklyScore[i]; ihigh = i; } } cout << "The highest score is " << high << " in module " << ihigh+1 << endl; return 0; } // lowScore和ave函数做同样修改 int lowScore(const vector<int>& weeklyScore) { int low = 16; int ilow = 0; for (int i = 0; i < 16; i++) { if (weeklyScore[i] < low) { low = weeklyScore[i]; ilow = i; } } cout << "The lowest score is " << low << " in module " << ilow+1 << endl; return 0; } int ave(const vector<int>& weeklyScore) { int sum = 0; for (int i = 0; i < 16; i++) { sum += weeklyScore[i]; } int average = sum / 16; cout << "The average score is " << average << endl; // 新增输出结果语句 return 0; } // 修改main函数,只调用一次getData int main() { vector<int> scores = getData(); highScore(scores); lowScore(scores); ave(scores); return 0; }修复其他小问题
- 删掉
highScore()中重复声明的int high;。 - 给
highScore()的ihigh、lowScore()的ilow添加声明和初始化,避免未定义行为。 - 在
ave()中添加输出平均分数的语句,否则计算结果不会显示。
- 删掉
修复后的完整代码
#include <iostream> #include <string> #include <vector> using namespace std; vector<int> getData() { vector<int> weeklyScore(16, 0); for (int i = 0; i < 16; i++) { cout << "Enter quiz score (0-15) for week " << i+1 << " : " << endl; cin >> weeklyScore[i]; if (weeklyScore[i] < 0 || weeklyScore[i] > 15) { cout << "Please enter a valid score (0-15): " << endl; i--; } } for (int i = 0; i < 16; i++) { cout << "Module " << i+1 << ": " << weeklyScore[i] << endl; } return weeklyScore; } int highScore(const vector<int>& weeklyScore) { int high = 0; int ihigh = 0; for (int i = 0; i < 16; i++) { if (weeklyScore[i] > high) { high = weeklyScore[i]; ihigh = i; } } cout << "The highest score is " << high << " in module " << ihigh+1 << endl; return 0; } int lowScore(const vector<int>& weeklyScore) { int low = 16; int ilow = 0; for (int i = 0; i < 16; i++) { if (weeklyScore[i] < low) { low = weeklyScore[i]; ilow = i; } } cout << "The lowest score is " << low << " in module " << ilow+1 << endl; return 0; } int ave(const vector<int>& weeklyScore) { int sum = 0; for (int i = 0; i < 16; i++) { sum += weeklyScore[i]; } int average = sum / 16; cout << "The average score is " << average << endl; return 0; } int main() { vector<int> scores = getData(); highScore(scores); lowScore(scores); ave(scores); return 0; }
内容的提问来源于stack exchange,提问作者Islandari
相关产品推荐
相关产品推荐

