2016-03-29 5 views
1

У меня есть некоторые проблемы относительно вложенного цикла по программированию C Я пытался напечатать список, как это:Вложенный цикл для программирования C

| |0|1|2|3|4|5|6|7|8|9| 
|0| | | | | | | | | | | 
|1| | | | | | | | | | | 
|2| | | | | | | | | | | 
|3| | | | | | | | | | | 
|4| | | | | | | | | | | 
|5| | | | | | | | | | | 
|6| | | | | | | | | | | 
|7| | | | | | | | | | | 
|8| | | | | | | | | | | 
|9| | | | | | | | | | | 

но есть что-то проблема, когда я печатаю мой код и отображение:

| |0|1|2|3|4|5|6|7|8|9| 
|0|0|0|0|0|0|0|0|0|0|0| 
|1|0|1|1|1|1|1|1|1|1|1| 
|2|0|2|2|2|2|2|2|2|2|2| 
|3|0|3|3|3|3|3|3|3|3|3| 
|4|0|4|4|4|4|4|4|4|4|4| 
|5|0|5|5|5|5|5|5|5|5|5| 
|6|0|6|6|6|6|6|6|6|6|6| 
|7|0|7|7|7|7|7|7|7|7|7| 
|8|0|8|8|8|8|8|8|8|8|8| 
|9|0|9|9|9|9|9|9|9|9|9| 

Существует мой код:

void displayBoard(Cell board[BOARD_HEIGHT][BOARD_WIDTH], Player * player) 
{ 
    int i, j; 
    printf("| "); 
    for (j = 0; j < BOARD_WIDTH; j++) 
    { 
     printf("|%d",j); 
    } 

    printf("|\n"); 

    for (i = 0; i < BOARD_HEIGHT; i++) 
    { 
     for (j = 0; j < BOARD_WIDTH; j++) 
     { 
      printf("|%d",i); 
      if (j == 0) 
      { 
       printf("|%d",j); 
      } 
     } 
     printf("|\n"); 
    } 
    printf("\n"); 
} 

Есть кто-то может помочь в этом Кондит ion: только один ряд и один столбец, другой пуст.

+1

Почему 'printf (« |% d », i);' внутри внутреннего цикла? – Michael

+1

Возможно, 'printf (" |% d ", i); if (j == 0) '->' if (j == 0) printf ("|% d", i); 'Кажется, что' printf ("|% d", i) 'должно выполняться вне 'for (j)' loop. – chux

+0

OH !!!!! Я это исправлю. Однако он не может выполнять одну строку и один столбец – CKL

ответ

0

Это, как вы должны написать код:

void displayBoard(Cell board[BOARD_HEIGHT][BOARD_WIDTH], Player * player) 
{ 
    int i, j; 
    printf("| "); 
    for (j = 0; j < BOARD_WIDTH; j++) 
    { 
     printf("|%d",j); 
    } 

    printf("|\n"); 

    for (i = 0; i < BOARD_HEIGHT; i++) 
    { 
     for (j = 0; j < BOARD_WIDTH; j++) 
     { 
      if (j == 0) 
      { 
       printf("|%d",i); 
      } 
      printf("| "); 
     } 
     printf("|\n"); 
    } 
    printf("\n"); 
} 

Есть несколько проблем с текущим кодом:

  1. Вы printf("|%d",i); во внутреннем цикле для каждого j в то время как то, что вы действительно хотите просто распечатать его, когда j == 0 один раз. Остальное, вы хотите printf("| "):

    printf("| "); //you want to make this blank 
    if (j == 0) 
    { 
        printf("|%d",i); //you want to print i here, not j 
    } 
    
  2. между оттиском числа, когда j == 0 и печать бланка должны быть отменены:

    if (j == 0) 
    { 
        printf("|%d",i); //you want to print i here, not j 
    } 
    printf("| "); //put the blank printing after the number 
    
1

Ни в одной точки в теле внутренняя петля, вы печатаете пробелы. Вместо этого вы печатаете значение i, которое является номером столбца.

 printf("|%d",i); 
     if (j == 0) 
     { 
      printf("|%d",j); 
     } 

Вместо печати i только на первой итерации и распечатать пространстве каждый раз:

 if (j == 0) { 
      printf("|%d",i); 
     } 
     printf("| "); 

Выход:

| |0|1|2|3|4|5|6|7|8| 
|0| | | | | | | | | | 
|1| | | | | | | | | | 
|2| | | | | | | | | | 
|3| | | | | | | | | | 
|4| | | | | | | | | | 
|5| | | | | | | | | | 
|6| | | | | | | | | | 
|7| | | | | | | | | | 
|8| | | | | | | | | | 
1

Ключ к получению этого сделано правильно будет ограждающих повторение (пустые ячейки) в замкнутом контуре, ограничивая специализированную логику вне цикла:

void displayBoard(int height, int width) 
{ 
    int i, j; 

    printf("| "); 
    for (j = 0; j < width; j++) { 
     printf("|%d", j); 
    } 
    printf("|\n"); 

    for (i = 0; i < height; i++) { 
     printf("|%d", i); 
     for (j = 0; j < width; j++) { 
      printf("| "); 
     } 
     printf("|\n"); 
    } 
} 

Посмотрите, мама! no if s

0

Вы печатаете число i в каждой строке, когда хотите получить пустоту или данные массива. Вы также должны избавиться от печати нуля каждой строки, которая является то, что вы закодированы в этом является то, что часть коды исправлено:.

for (i = 0; i < BOARD_HEIGHT; i++) 
    { 
     for (j = 0; j < BOARD_WIDTH; j++) 
     { 

      if (j == 0) 
      { 
       printf("|%d",i); 
      } 
      printf("| "); ///or printf("|%d",board[i][j]) if you are after stored data 

     } 
     printf("|\n"); 
    } 

надеюсь, что это помогает.

0

Попробуйте это:

#define BOARD_HEIGHT 10 
#define BOARD_WIDTH 10 

void displayBoard() 
{ 
    int i, j; 

    printf("| "); 
    for (j = 0; j < BOARD_WIDTH; j++) 
    { 
     printf("|%d", j); 
    } 
    printf("|\n"); 

    for (i = 0; i < BOARD_HEIGHT; i++) 
    { 
     printf("|%d", i); 
     for (j = 1; j < BOARD_WIDTH; j++) 
     { 
      printf("| "); 
     } 
     printf("| |\n"); 
    } 
} 

BTW, нет необходимости передавать какие-либо аргументы этой функции.

Смежные вопросы