Сегодня я искал switch / case
в пакетных файлах и наткнулся на это. Я использовал это решение и расширил его с помощью goto exit
.
IF "%1"=="red" echo "one selected" & goto exit
IF "%1"=="two" echo "two selected" & goto exit
...
echo "Options: [one | two | ...]
:exit
Что приводит к состоянию по умолчанию (эхо-линия), и никаких дополнительных if
, когда выбор найден.
The other answers overlook one feature of c++. You can pass arrays by reference, and use templates:
template <typename T, int N>
void func(T (&a) [N]) {
for (int i = 0; i < N; ++i) a[i] = T(); // reset all elements
}
then you can do this:
int x[10];
func(x);
but note, this only works for arrays, not pointers.
However, as other answers have noted, using std::vector
is a better choice.
Если это под вашим контролем, используйте контейнер STL, например вектор или двухстороннюю очередь, вместо массива.
Нет, это невозможно.
Одно решение: поместите специальное значение в последнее значение массива, чтобы его можно было распознать.
Одно из очевидных решений - использовать STL. Если это невозможно, лучше явно передать длину массива. Я скептически отношусь к использованию уловки дозорного значения в данном конкретном случае. Оно работает лучше с массивами указателей, потому что NULL - хорошее значение для дозорного. С участием массив целых чисел, это не так просто - вам нужно иметь "магическое" дозорное значение, которое нехорошо.
Боковое примечание: если ваш массив определен и инициализирован как
int array[] = { X, Y, Z };
в той же области, что и ваш цикл, тогда
sizeof (array) вернет его реальный размер в байтах, а не размер указателя . Вы можете получить длину массива как
sizeof(array) / sizeof(array[0])
. Однако в общем случае, если вы получаете массив как указатель, вы не можете использовать этот трюк.
Можете ли вы попробовать добавить в массив нулевой символ \ 0
, а затем отправить его? Таким образом, вы можете просто проверить в цикле \ 0.
Если вы не можете передать размер, вам нужно различимое значение дозорного в конце (и вам нужно поместить его туда самостоятельно - как вы найдено, вы не можете доверять C ++, чтобы сделать это автоматически!). Невозможно просто заставить вызываемую функцию волшебным образом угадать размер, если он не передан и не используется явный, надежный дозорный.