Препроцессоры пропускают часть кода на C
Я работаю над проектом, в котором у меня есть матрица, и я делаю некоторую обработку с помощью матрицы, перемещая персонажа вверх, вниз, влево и вправо. Я сохранил ходы в массиве символов. Теперь я хочу напечатать только последние 10 состояний матрицы после того, как на ней будут выполнены другие шаги. Но я не хочу, чтобы печатались другие ходы, только последние 10 состояний матрицы.
Так что я перебираю ходы вот так:
int i = 0;
for (; i < strlen(movesArray); i++ ) {
operation = movesArray[i]; // move
switch (operation) {
case 'v': // process the moves
}
Тогда пока еще внутри for
цикл я делаю что-то вроде этого:
#ifdef NDEBUG // but this printing every state from 1 to 99
if( i >= strlen(movesArray) - 10)
printf("%s %d:\n", "Move", i );
print(matrix);
#endif
Однако он печатает все ходы, где я хочу только последние 10 экземпляров. Кто-нибудь может направить меня в правильном направлении? Я был на этом пару часов.
Если у меня 99 ходов, то он должен выполнить все ходы, но он должен просто напечатать последние 10 состояний матрицы, и это должно включать в себя ходы, которые были выполнены матрицей.
я компилирую свою программу с -D
флаг.
2 ответа
У вас нет фигурных скобок на вашем if
, Думайте об этом так:
if( i >= strlen(movesArray) - 10)
printf("%s %d:\n", "Move", i ); // No curly braces means only the statement after the
// if is part of the conditional, in this case
// thats this one..
print(matrix);
Итак, вы должны сделать это:
if( i >= strlen(movesArray) - 10) {
printf("%s %d:\n", "Move", i );
print(matrix);
} // Everything between the curly braces is part of this conditional.
Многие представители отрасли придерживаются стандарта кодирования, согласно которому вы всегда должны использовать фигурные скобки независимо от того, есть ли у вас несколько строк или только одна. Как показано выше, он добавляет только одну строку, но может предотвратить такие ошибки, как эта.
Примечание: это мое собственное мнение, никаких требований не подразумевается.
Вы, кажется, предполагаете, что оба вкладки в printf
заявления находятся под контролем if( ... )
условно, они не в с.
Вы должны добавить фигурные скобки, как показано ниже. В вашем примере кода только первый printf
находится под контролем if (...)
, В C вам нужны фигурные скобки для включения нескольких операторов.
#ifdef NDEBUG // but this printing every state from 1 to 99
if( i >= strlen(movesArray) - 10)
{
printf("%s %d:\n", "Move", i );
print(matrix);
}
#endif