我试图找到解决这个问题的方法,但到目前为止我还没有找到一个可以解决这个问题的方法。我正在编写一个程序,允许用户(目标受众为教师)输入四个不同年级类别的成绩。我决定使用向量来实现这一点,因为它们似乎比数组更灵活。我的主要问题是让我的main函数中的向量等于我填充函数的向量。以下是一些给我带来问题的代码:
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> getGrades(string);
int main()
{
string gradetype;
vector<int> lab;
vector<int> test;
vector<int> project;
vector<int> final_exam;
int i = 0;
cout << "Welcome to Grade Portal 4.0\n";
cout << "Please enter the grade type followed by the\n";
cout << "grades for the grade type.\n";
cout << "The choice are: \n";
cout << "Lab\n";
cout << "Test\n";
cout << "Project\n";
cout << "Final\n";
cout << "These can be entered in any order\n";
cout << "Enter 'Q' at any time to quit\n";
cout << "--------------------------------------------------\n";
do
{
cout << "Enter grade type: ";
getline(cin, gradetype);
if (gradetype == "lab")
{
lab = getGrades(gradetype);
i++;
}
else if (gradetype == "test")
{
test = getGrades(gradetype);
i++;
}
else if (gradetype == "project")
{
project = getGrades(gradetype);
i++;
}
else if (gradetype == "final")
{
final_exam = getGrades(gradetype);
i++;
}
else if (gradetype == "q")
{
i = 5;
}
else
cout << "You shoudlnt be seeing this\n";
cin.ignore();
}while (i < 4);
}
vector<int> getGrades(string gradetype)
{
int gradeN;
vector<int> grades;
int grade;
cout << "How many grades do you have to enter?: ";
cin >> gradeN;
for (int i = 0; i < gradeN; i++)
{
cin.ignore();
cout << gradetype << " grade: ";
cin >> grade;
grades.push_back(grade);
}
return grades;
}
由于我一直在做的所有编辑,我的代码现在很多,但我拿出了我认为问题来自的部分。如果我使用循环在主函数中显示向量的内容,如“lab”或“test”,则内容不正确。新矢量的内容应该是用户输入的等级。相反,我得到不同的数字。 例如,我输入了以下信息并获得了一些非常奇怪的输出: 每个等级类型2个等级,每个等级为“99”(每个等级的内容应为99,99) 使用for循环,我打印出向量的内容并获得以下内容: 实验室矢量 - (3351064,3351064)| 测试向量 - (0,0)| 项目矢量 - (1983462368,1983462368)| 期末考试矢量 - (1982745200,1982745200)| 我有正确的向量中的元素数量,但数字是非常不正确的。根据我的样本输入,所有这些载体的内容应为99,99
我觉得好像问题在于设置“lab”向量的内容等于函数getGrades中创建的向量“grade”的内容。我没有得到任何构建错误或警告,代码执行成功,只是意外的结果。我确定它看起来很小,但是我无法解决这个问题。任何帮助将不胜感激!