C: цикл For выполняется несмотря на игнорирование выражений инициализации и приращения, поэтому всегда true - PullRequest
0 голосов
/ 07 октября 2018

КОНТЕКСТ:

Здравствуйте, я пытаюсь напечатать доску Connect 4x6, где каждая секция |___| с тремя подчеркиваниями.Я хочу, чтобы каждый центр подчеркивал элемент 2D-массива, чтобы я мог позже обновить его.

CONFLICT:

Я не получаю ошибок или предупреждений, но мойвывод просто |________ ... с бесконечным количеством подчеркиваний.Я успешно переписал код, где печатаются три подчеркивания без назначения центра в массиве (однако, очевидно, что этот код бесполезен для создания реальной игры, так как я не могу обновить подчеркивания центра).Все объявления цикла в моем текущем коде были использованы в этом успешном варианте, так что я уверен, что это не моя проблема.Я также могу предоставить этот код, если вы думаете, что он может вам помочь.Что я знаю, так это то, что colCnt (количество столбцов) увеличивается на единицу, а undCnt (количество подчеркиваний) застревает на 2. Из-за этого я подозреваю, что этот цикл for является основной проблемой в моем коде, однако я не знаю, где:

                // Only print `_` three times as long as there have been 7 total or less vertical lines printed
                for (int undCnt = 0; undCnt < 3 && vertCnt <= 6; undCnt++)
                {

                    // Print left and right sections as `_`
                    if(undCnt != 1)
                    {
                        printf("_");

                        // If printing left section, increment column count
                        if(undCnt = 1){colCnt++;}
                    }

                    // Assign middle section to board array and prints it as `_`
                    else if(undCnt == 1)
                    {
                        arr[rowCnt][colCnt] = '_';
                        printf("%c", arr[rowCnt][colCnt]);

                    }

                }

КОД:

#include <stdio.h>

void PrintBoard(char arr[6][7]);

int main()
{

    // Declaration of 7x6 2D board array: board[row][col]
    char board[6][7];

    PrintBoard(board);

    return 0;
}

void PrintBoard(char arr[6][7])
{
    int vertCnt = 0; // Counts vertical lines (8 per row, separates sections)
    int undCnt = 0; // Counts underscores (3 per section)
    int rowCnt = 0; // Counts rows (6 total)
    int colCnt = 0; // Count columns (7 total)

    // Print game title
    printf("      ~~ CONNECT FOUR ~~\n\n");

    for (int rowCnt = 0; rowCnt <= 6; rowCnt++)
        {
            // If current row is not the first, start it on a new line
            if (rowCnt > 0)
            {
                printf("\n");
            }

            // Creation of row: |___|___|___|___|___|___|___|
            for (int vertCnt = 0; vertCnt < 8; vertCnt++)
            {
                printf("|");

                // Only print `_` three times as long as there have been 7 total or less vertical lines printed
                for (int undCnt = 0; undCnt < 3 && vertCnt <= 6; undCnt++)
                {

                    // Print left and right sections as `_`
                    if(undCnt != 1)
                    {
                        printf("_");

                        // If printing left section, increment column count
                        if(undCnt = 1){colCnt++;}
                    }

                    // Assign middle section to board array and prints it as `_`
                    else if(undCnt == 1)
                    {
                        arr[rowCnt][colCnt] = '_';
                        printf("%c", arr[rowCnt][colCnt]);

                    }

                }
            }
        }

    // Print column numbers
    printf("\n  1   2   3   4   5   6   7\n\n");


    /* HOW THE BOARD SHOULD LOOK:

         ~~ CONNECT FOUR ~~             <--- GAME TITLE

    |___|___|___|___|___|___|___|
    |___|___|___|___|___|___|___|
    |___|___|___|___|___|___|___|       <--- BOARD
    |___|___|___|___|___|___|___|
    |___|___|___|___|___|___|___|
    |___|___|___|___|___|___|___|
      1   2   3   4   5   6   7         <--- COLUMN NUMBERS

    */

}

Если у вас есть какие-либо вопросы, просто дайте мне знать.Спасибо!

1 Ответ

0 голосов
/ 07 октября 2018

Рассматривали ли вы попытку печати "___ |"все сразу?Тогда все, что вам нужно сделать, это проверить количество столбцов, если оно равно 0, выведите '|'если это максимальное значение столбца, добавьте символ новой строки.

for(int row_count = 0; row_count<max_rows; rows++)
{
    for ( int column_count = 0; column_count<max_columns; columns++)
    {
         if( column_count==0)
         {
             printf('|');
         }
         printf("___|");        
    }
    printf('\n');
}

может быть что-то вроде этого?

...