Как программно создать несколько структур в C ++ - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь прочитать данные из файла .txt и использовать их для создания нескольких экземпляров структуры. Я хочу сделать это программно с помощью кода, а не объявлять каждый экземпляр структуры вручную заранее определенным способом (я хочу, чтобы он работал для любого количества создаваемых структур / строк данных во входном файле).

Входной файл содержит имя, а затем три двойных. Каждая новая строка - это новый человек ("input.txt"):

Peter 1.0 2.0 3.0
James 4.0 5.0 6.0

Код:

struct Person 
{
  string name;
  vector<double> numbers;
};


int main()
{

ifstream inStream("input.txt");

vector<Person> vecPerson; // vector to hold structs
string nameInput;
double num1;
double num2;
double num3;

int i =0;
while( inStream.peek() != EOF )
{

    inStream >> nameInput >> num1 >> num2 >> num3; //read in data to variables

    //create struct
    Person person[i];
    person[i].name = nameInput;
    person[i].numbers[0] = num1;
    person[i].numbers[1] = num2;
    person[i].numbers[2] = num3;
    i++;

    vecPerson.push_back(person[i]);
}  

Этот код дает segfault. Строка Person person[i]; явно синтаксически неверна. Я не уверен, как создать другое имя для экземпляра структуры для каждого l oop в то время как l oop.

Как мне это сделать?

1 Ответ

4 голосов
/ 26 мая 2020

Нет никаких оснований называть структуру Person в l oop. Вы можете просто push_back a Person на вектор:

while( inStream.peek() != EOF )
{
    inStream >> nameInput >> num1 >> num2 >> num3; //read in data to variables

    vecPerson.push_back(Person{nameInput, {num1,num2,num3}});
}  

Это позволяет избежать именования структур внутри l oop или использования индекса i вообще.

Кроме того, состояние вашего l oop неправильное. Вам нужно просто сделать:

while(inStream >> nameInput >> num1 >> num2 >> num3) //read in data to variables
    vecPerson.push_back(Person{nameInput, {num1,num2,num3}});

Теперь каждый Person в векторе имеет «другое имя» благодаря возможности индексировать Person в определенной позиции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...