Препроцессоры пропускают часть кода на 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
Другие вопросы по тегам