Хорошо, я знаю, что это может показаться странным — я новичок в идее программирования.
У меня есть проект ЧПУ, который будет принимать значения из текстового файла, присваивать их и передавать через последовательное соединение на 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
?
Вы можете использовать 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
делает, он создает и помещает элемент в вектор.
Вы можете использовать массивы, которые имеют динамический размер.
например отсюда:
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>