Как использовать функцию векторов pushback для хранения вещей из файла? - PullRequest
0 голосов
/ 24 февраля 2019

предположим, у меня есть файл, который содержит следующий размер студентов, имя, фамилию, gpa

формат файла:

2
sam harris 3
john witt 2

однако я запутался, как я могу нажатьвернуть имя, фамилию и gpa в вектор?

я пробовал следующую реализацию, но все еще ошибался:

 ifstream mycin;
 float *Pcgpa = new float[size];  string PfirstN, PlastN;
 float Avg; float sum = 0;
 for (int i = 0; i <size; i++)
 {
   mycin >> PfirstN[i] >> PlastN[i] >> Pcgpa[i];
   firstN.push_back(PfirstN);
   lastN.push_back(PlastN);
   cgpa.push_back(Pcgpa);
   sum += cgpa[i];
 }

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

Несколько замечаний:

a) Код не является полным.Пожалуйста, опубликуйте полный и желательно скомпилированный исходный код.

б) Зачем вам смешивать std :: vector и массивы?(push_back существует только в std :: vector, но вы выделяете Pcgpa как стандартный массив C), и вам не нужен размер заранее.Кроме того, если вы используете векторы и читаете до конца файла, вам не нужен Pcgpa.

c) Вам нужно вводить данные в PfirstN, а не в PfirstN [i].Вы читаете целую строку, а не письмо.Кроме того, доступ к PfirstN [i] с i> 0 в пустой строке - это нет-нет.

Это должно работать:

#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main()
{
    int size= 0;
    cin >> size;

    vector<string> vectorOfFirstNames;
    vector<string> vectorOfLastNames;
    vector<float> vectorOfcgpa;
    float sum= 0.0;

    for (int i = 0; i < size; i++) {
        string firstName;
        string lastName;
        float cgpa= 0.0;

        cin >> firstName >> lastName >> cgpa;
        vectorOfFirstNames.push_back(firstName);
        vectorOfLastNames.push_back(lastName);
        vectorOfcgpa.push_back(cgpa);
        sum+= cgpa;
    }

    // Print data
    for (int i = 0; i < size; i++) {
        cout << "First name: " << vectorOfFirstNames[i] << " - Last name: " << vectorOfLastNames[i] << " - cgpa: " << vectorOfcgpa[i] << endl;
    }

    // Please don't divide by zero ;)
    float avg= size > 0 ? sum/size : 0;
    cout << "Avg: " << avg << endl;
    cout << "Sum: " << sum << endl;
}
0 голосов
/ 24 февраля 2019

Обычно (но кто знает, когда учеников просят выполнять упражнения), вы объявляете структуру, содержащую одну строку данных

struct Student
{
    string first_name;
    string last_name;
    float gpa;
};

Затем вы объявляете вектор этих структур

vector<Student> students;

Затем вы должны написать свой цикл и нажать на вектор

for (int i = 0; i < size; i++)
{
     Student s;
     mycin >> s.first_name >> s.last_name >> s.gpa;
     students.push_back(s);
     sum += s.gpa;
}

PS Вы злоупотребляете сокращениями (ИМХО).Это не помогает с удобочитаемостью вашего кода.

...