Используя векторную структуру, не могу добавить к ней vector.size - PullRequest
0 голосов
/ 28 февраля 2020

Так что в основном у меня есть функция read (), для которой я хочу читать из файла, с именами учеников и их оценками, но если я использую for (auto i = 0; i <1000; i ++), у меня проблема с объявлением размера вектора //// </p>

void read(vector <Student> A, vector<int> ndgrades)
{

   // IF I CHANGE  A.size() to number, I get error, but here A.size() = 0, hwo do i change it.

    for (auto i = 0; i < A.size(); i++) {
        fin >> A[i].name;
        fin >> A[i].srname;
        int j = 0;
        double vid = 0;
        int grade;
        while (true)
        {
            fin >> grade;
            if (grade == 0) {
                cout << "bad grade" << endl;
                cout << "end of the program" << endl;

            }
            else if (j == 14)break;
            else {
                ndgrades.push_back(grade);
                vid += grade;
                j++;
            }
        }
        double average = vid / j * 1.0;
      //  cout << "Enter egzam result" << endl;
        fin >> A[i].egz;
        A[i].last = average * 0.4 + A[i].egz * 0.6;
        A[i].mediana = (average + A[i].egz) / 2;

        ndgrades.erase(ndgrades.begin(), ndgrades.begin() );
    }

}

1 Ответ

0 голосов
/ 28 февраля 2020

Есть ряд проблем с этим кодом. Прежде всего, вы передаете векторы A и ndgrades по значению, поэтому после завершения функции read вызывающая сторона не вернет результаты, как ожидалось. Вы должны передать по ссылке, чтобы ваша функция могла изменять исходные экземпляры в вызывающей программе, как показано ниже с & в типе.

void read(vector <Student>& A, vector<int>& ndgrades)
{
    //...

Во-вторых, вы должны просто позволить динамически расти вектору, а не чем попытаться предварительно выделить или вручную изменить размер. Для этого создайте экземпляр Student, затем добавьте его в список следующим образом:

    while (true) {
        Student s;
        fin >> s.name;
        fin >> s.srname;
        A.push_back(s);

В последней части неясно, чего пытается достичь часть кода. Если вы хотите сохранить список оценок для каждого учащегося, почему бы не иметь вектор внутри самого типа учащегося?

Кроме того, объявление fin не отображается, но при условии, что это входной файл, вы может прекратить ваш l oop с:

        if (!fin.good())
            break;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...