Как установить неопределенное количество переменных, указанных другой переменной

Хорошо, я знаю, что это может показаться странным — я новичок в идее программирования.
У меня есть проект ЧПУ, который будет принимать значения из текстового файла, присваивать их и передавать через последовательное соединение на Arduino, который будет принимать и приводить двигатели и так далее, и так далее.

for( std::string line; getline( input, line ); )
{
int x, y;
input >> x >> y;
}

Но я хочу, чтобы программа могла обрабатывать текстовые файлы любой длины — любое количество координат. В интерфейсе я проектирую панель ввода, которая позволит пользователю указать количество команд. Но как мне ввести код, который будет принимать такое количество команд и вводить это количество переменных? Я понимаю, что мог бы перебор, создавая 1000 переменные каждого X, Y, Zи другие типы команд, и имеют до 1000 возможна обработка строк, но было бы гораздо эффективнее иметь код, который понимает это и подстраивается под меня.

Скажем, например, у меня в этом поле ввода текста выводится значение, обозначенное NumberOfCommands, Как бы я сказал программе для создания ряда X-axis, Y-axis, and Z-axis (а также другие последовательные) команды, где это число равно NumberOfCommands?

0

Решение

Вы можете использовать std::vector класс для хранения любого количества элементов.

Так что в вашем случае что-то вроде этого:

struct Coordinate {
int x,y,z;
};

std::vector<Coordinate> coords;

for( std::string line; getline( input, line ); )
{
Coordinate coord;
input >> coord.x >> coord.y >> coord.z;
coords.push_back(coord);
}

Или с emplace_back:

struct Coordinate {
Coordinate(int x, int y, int z):x(x),y(y),z(z){ }
int x,y,z;
};

std::vector<Coordinate> coords;
int x,y,z;
for( std::string line; getline( input, line ); )
{
input >> x >> y >> z;
coords.emplace_back(x,y,z);
}

emplace_back не делает копию как push_back делает, он создает и помещает элемент в вектор.

3

Другие решения

Вы можете использовать массивы, которые имеют динамический размер.

например отсюда:

int *myArray;           //Declare pointer to type of array
myArray = new int[x];   //use 'new' to create array of size x
myArray[3] = 10;        //Use as normal (static) array
...
delete [] myArrray;     //remember to free memory when finished.

Вопрос в том, где x родом из? Вы можете принять 1000 и вести подсчет по мере заполнения массива. Затем, если вы получите больше информации, чем этот размер, вы можете изменить размер массива.

Или вы можете начать с сущности, чтобы начать с STL vector<int>

0

По вопросам рекламы [email protected]