#arrays #multidimensional-array #foreach #c -cli
#массивы #многомерный массив #foreach #c -cli
Вопрос:
Итак, прежде всего, вы должны отметить, что я использую Visual studio 2010. В любом случае, я получаю очень странную ошибку в моем for each loop, которая не имеет для меня никакого смысла.
BYTE CPUKeys[][0x10] =
{
{0x28,0x53,0x71,0xD9,0x7B,0x47,0xCC,0x50,0xAF,0x45,0x8D,0xB3,0xED,0x53,0x22,0x13},//Randy//encrypted
{0x6E,0x38,0xB0,0xEF,0x6E,0x96,0x20,0x16,0xE5,0xCA,0x4B,0xE9,0x23,0x4E,0xC6,0xA5},//Josh//encrypted
{0x95,0x2C,0x20,0x98,0xF9,0x99,0x28,0x0F,0xEE,0xA7,0x8F,0x48,0x58,0x01,0xB7,0x07},//Falcon//encrypted
{0x64,0xDC,0x1E,0xFA,0xD2,0xAE,0x57,0x6C,0x0B,0xD0,0x39,0x6A,0x13,0x2C,0x91,0xE0},//Justin//encrypted
{0x8D,0x82,0x6D,0x71,0x82,0xDC,0x83,0x8F,0x79,0x51,0xB8,0x7C,0x1F,0xC1,0xBF,0xD4},//Bypass//encrypted
{0x27,0xF2,0xA7,0xF3,0xE2,0xDC,0x01,0x19,0x17,0xF4,0x11,0xFE,0xE9,0xB5,0x0C,0x2C},//Surge//encrypted
{0x6D,0x7C,0x86,0x9A,0x6A,0xE1,0xD4,0x10,0x76,0x16,0x11,0x7C,0xED,0xB3,0x4D,0x56},//Noel//encrypted
{0x3D,0x6C,0x88,0x8C,0x9D,0x3A,0xA5,0x40,0x64,0xDF,0xDF,0x8D,0x94,0xFD,0x28,0xF1},//XexRgh//encrypted
{0x06,0x0D,0x8C,0xB6,0xB6,0x6D,0x29,0xD7,0x41,0xE1,0x13,0x35,0x84,0x80,0x68,0x31}//Zoobzy//encrypted
};
Хорошо, вот мой многомерный массив БАЙТОВ.
for each(BYTE ID[0x10] in CPUKeys)
{
И для каждого цикла есть my . Странная вещь, которая происходит с этим, — это моя ошибка, которую я получаю в ID. Ошибка гласит: «для каждого» тип итератора «БАЙТ [16]» несовместим с типом элемента «БАЙТ [16]». Есть идеи, почему это может быть сказано? Что я делаю не так, и как мне это исправить?
Комментарии:
1.
for each(BYTE ID[0x10] in CPUKeys)
недопустимая конструкция C , покажите точное утверждение и ошибки2. Мой компилятор (VS 2005) показывает другую ошибку:
for each statement cannot operate on variables of type 'unsigned char [9][16]'
, так что, возможно, то, что вы хотите, невозможно…3. Это вся функция того, что я использую, извините за путаницу. Редактировать: по-видимому, enter не делает отступ до следующей строки в комментарии. Кроме того, в любом случае было слишком долго комментировать: (
4. Вы имеете в виду
c /cli
правильно? (Это совсем другой зверьc
)5. @user3765064 Просто дикое предположение: может
BYTE (amp;ID)[0x10]
быть, работает? (Я не могу проверить это сам)
Ответ №1:
Попробуйте это, если это сработает:
for(autoamp; rows: CPUKeys)// Iterating over rows
{
for(autoamp; elem: rows)
{
// iterate every row's column
}
}
Комментарии:
1. AFAIK Visual Studio 2010 не поддерживает циклы диапазона, но я не использовал его в течение длительного времени.
Ответ №2:
Насколько я знаю, в c нет ни одного цикла. Вместо этого используйте два цикла for . Что-то вроде этого
for (int i = 0; i < 9; i)
{
for (int j = 0; j < 16; j)
{
BYTE value = CPUKeys[i][j];
}
}
Комментарии:
1. Синтаксис для цикла foreach в
C 11
2. OP использует Visual Studio 2010;
for each
похоже, это расширение языка, специфичное для этого компилятора3. for(int KeyNum = 1;KeyNum < 10;KeyNum ) { if(!memcmp(Cpu,CPUKeys[KeyNum],0x10)) { // однако консоль xbox отображается черным цветом. Однако, похоже, он делает то, что вы говорите. Любые мысли о том, что может быть не так с этим?