사용자가 입력 한 이름으로 이름을 초기화하려고 시도하는 20 번째 줄에서 코드가 충돌합니다. 벡터가 범위를 벗어나는 것 같습니다. 그 문제와 이유에 대해 알아 내도록 도와주세요. 이 코드는 사용자의 학생 데이터 입력을 가져 와서 성적에 따라 정렬 한 다음 다시 인쇄합니다. 다음은 코드입니다 : 그 시점에서벡터가 범위를 벗어남 예외라고 말하는 충돌이 발생했습니다
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
struct studentDatabase{
std::string name;
int grade;
};
void getUserInput(std::vector<struct studentDatabase> &student)
{
std::cout << "No of students for which the data is to be entered n";
int noOfStudents(0);
std::cin >> noOfStudents;
for (unsigned int i = 0; i < noOfStudents; ++i)
{
std::cout << "Enter name n";
std::cin >> student.at(i).name; // this is where it is crashing
//not sure why
std::cout << "Enter grade n";
std::cin >> student.at(i).grade;
}
}
void sort(std::vector<struct studentDatabase> &student)
{
for (unsigned int i = 0; i < student.size(); ++i)
{
for (unsigned int j = 0; j < student.size() -i; j++)
{
if (student.at(i).grade < student.at(j).grade)
std::swap(student.at(i), student.at(j));
}
}
}
void printStudentOrder(const std::vector<struct studentDatabase> &student)
{
for (unsigned int i = 0; i < student.size(); ++i)
std::cout << student.at(i).name << " got a grade of " <<
student.at(i).grade << std::endl;
}
int main()
{
std::vector<struct studentDatabase> student;
getUserInput(student);
sort(student);
printStudentOrder(student);
return 0;
}
벡터에 요소가 없으므로 액세스하려고합니다. .push_back을 사용하여 요소를 추가하십시오. – DeiDei