C++如何实现函数间变量共享?GPA计算器开发疑问
解决C++跨函数传递多个成绩变量的问题
你代码里的核心问题有两个:一是usergrades函数用逗号表达式返回多个值的方式完全错误(C++函数无法直接返回多个值,逗号表达式只会返回最后一个值);二是函数内定义的grade1至grade5是局部变量,函数执行完毕后就会被销毁,其他函数无法直接访问。以下是三种可行的解决方案:
方案一:用结构体封装成绩
把所有成绩打包进一个结构体,让usergrades返回这个结构体,再传递给gpacalculation使用。
#include <iostream> using namespace std; // 定义存储成绩的结构体 struct Grades { int grade1, grade2, grade3, grade4, grade5; }; Grades usergrades() { Grades grades; cout << "请输入你的所有成绩:" << endl; cout << "成绩1:"; cin >> grades.grade1; cout << "成绩2:"; cin >> grades.grade2; cout << "成绩3:"; cin >> grades.grade3; cout << "成绩4:"; cin >> grades.grade4; cout << "成绩5:"; cin >> grades.grade5; return grades; } void gpacalculation(const Grades& grades) { // 计算总分,这里以百分制转4分制为例,可根据需求调整GPA规则 int total = grades.grade1 + grades.grade2 + grades.grade3 + grades.grade4 + grades.grade5; double average = static_cast<double>(total) / 5; double gpa; if (average >= 90) gpa = 4.0; else if (average >= 80) gpa = 3.0; else if (average >= 70) gpa = 2.0; else if (average >= 60) gpa = 1.0; else gpa = 0.0; cout << "你的GPA是:" << gpa << endl; } int main() { Grades myGrades = usergrades(); gpacalculation(myGrades); return 0; }
方案二:用数组/vector传递成绩
用容器存储成绩,既能简化输入逻辑,也方便后续扩展课程数量。
#include <iostream> #include <vector> using namespace std; vector<int> usergrades() { vector<int> grades(5); cout << "请输入你的所有成绩:" << endl; for (int i = 0; i < 5; ++i) { cout << "成绩" << (i+1) << ":"; cin >> grades[i]; } return grades; } void gpacalculation(const vector<int>& grades) { int total = 0; for (int grade : grades) { total += grade; } double average = static_cast<double>(total) / grades.size(); double gpa; if (average >= 90) gpa = 4.0; else if (average >= 80) gpa = 3.0; else if (average >= 70) gpa = 2.0; else if (average >= 60) gpa = 1.0; else gpa = 0.0; cout << "你的GPA是:" << gpa << endl; } int main() { vector<int> myGrades = usergrades(); gpacalculation(myGrades); return 0; }
方案三:用引用参数传递成绩
在usergrades中通过引用直接修改main函数里的变量,再将这些变量传入gpacalculation。
#include <iostream> using namespace std; void usergrades(int& grade1, int& grade2, int& grade3, int& grade4, int& grade5) { cout << "请输入你的所有成绩:" << endl; cout << "成绩1:"; cin >> grade1; cout << "成绩2:"; cin >> grade2; cout << "成绩3:"; cin >> grade3; cout << "成绩4:"; cin >> grade4; cout << "成绩5:"; cin >> grade5; } void gpacalculation(int grade1, int grade2, int grade3, int grade4, int grade5) { int total = grade1 + grade2 + grade3 + grade4 + grade5; double average = static_cast<double>(total) / 5; double gpa; if (average >= 90) gpa = 4.0; else if (average >= 80) gpa = 3.0; else if (average >= 70) gpa = 2.0; else if (average >= 60) gpa = 1.0; else gpa = 0.0; cout << "你的GPA是:" << gpa << endl; } int main() { int g1, g2, g3, g4, g5; usergrades(g1, g2, g3, g4, g5); gpacalculation(g1, g2, g3, g4, g5); return 0; }
内容的提问来源于stack exchange,提问作者Corey Newman
相关产品推荐
相关产品推荐

