2016-09-23 5 views
0

チェッカーボード/チェス盤を表示するコードを作成しようとしています。私はチェッカーボード上のすべての正方形に番号を付けました。したがって、将来のプログラミングの目的としてピースの位置を手動で選択することができます。以下のような警告がpreview 2d配列8x8はcで動作しません

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 | 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 | 1 | 2 | 3 | 4 

#include <stdio.h> 
//{",",",",",",","}, 
void main() 
{ 
int board[8][8] = { 
{'1','2','3','4','5','6','7','8'}, 
{'9','10','11','12','13','14','15','16'}, 
{'17','18','19','20','21','22','23','24'}, 
{'25','26','27','28','29','30','31','32'}, 
{'33','34','35','36','37','38','39','40'}, 
{'41','42','43','44','45','46','47','48'}, 
{'49','50','51','52','53','54','55','56'}, 
{'57','58','59','60','61','62','63','64'} 
}; 

     /* Display the checkerboard */ 
printf("\n\n"); 
printf(" %c | %c | %c| %c | %c | %c | %c | %c \n", board[0][0], board[0][1], board[0][2], board[0][3], board[0][4], board[0][5], board[0][6], board[0][7]); 
printf("---+---+---+---+---+---+---+---\n"); 
printf(" %c | %c | %c| %c | %c | %c | %c | %c \n", board[1][0], board[1][1], board[1][2], board[1][3], board[1][4], board[1][5], board[1][6], board[1][7]); 
printf("---+---+---+---+---+---+---+---\n"); 
printf(" %c | %c | %c| %c | %c | %c | %c | %c \n", board[2][0], board[2][1], board[2][2], board[2][3], board[2][4], board[2][5], board[2][6], board[2][7]); 
printf("---+---+---+---+---+---+---+---\n"); 
printf(" %c | %c | %c| %c | %c | %c | %c | %c \n", board[3][0], board[3][1], board[3][2], board[3][3], board[3][4], board[3][5], board[3][6], board[3][7]); 
printf("---+---+---+---+---+---+---+---\n"); 
printf(" %c | %c | %c| %c | %c | %c | %c | %c \n", board[4][0], board[4][1], board[4][2], board[4][3], board[4][4], board[4][5], board[4][6], board[4][7]); 
printf("---+---+---+---+---+---+---+---\n"); 
printf(" %c | %c | %c| %c | %c | %c | %c | %c \n", board[5][0], board[5][1], board[5][2], board[5][3], board[5][4], board[5][5], board[5][6], board[5][7]); 
printf("---+---+---+---+---+---+---+---\n"); 
printf(" %c | %c | %c| %c | %c | %c | %c | %c \n", board[6][0], board[6][1], board[6][2], board[6][3], board[6][4], board[6][5], board[6][6], board[6][7]); 
printf("---+---+---+---+---+---+---+---\n"); 
printf(" %c | %c | %c| %c | %c | %c | %c | %c \n", board[7][0], board[7][1], board[7][2], board[7][3], board[7][4], board[7][5], board[7][6], board[7][7]); 

} 

これが出力されます。これは私が得たものである

main.c:13:37: warning: multi-character character constant[-Wmultichar]                   
{'57','58','59','60','61','62','63','64'} 

それは9より高い印刷できない文字のように見えます!私が望んでいたのは、(2次元配列の)チェッカーボードの簡単なプレビューでした。私はこのコードでいくつかの部分を変更しようとしましたが、運が無ければ...どんなアイデアですか?

+0

あなたは、二重引用符で囲まれた文字列のループではない文字、そして%2Sフォーマットを必要としています。真剣に、このようにprintfの行と行をコピー/ペーストすることはできません。 –

+1

すべての一重引用符を削除し、 'printf'で' "%d" 'を使用してください。 –

+0

' int'は 'char'ではありません。複数シンボルの文字リテラルは意味をなさない。したがって、コンパイラの警告。また、隣接する番号のルックアップテーブルを持つことも意味をなさないので、実行時にこれらを計算することができます。 – Lundin

答えて

3

の値を出力するように依頼します。唯一のキャラクターでなければなりません。 しかし、それはそう、文字列内の連続した整数のリストをハードコーディングすることは意味がありません:

式でシンプルなダブルループははるかにコンパクトであり、コピー/ペーストの多くを保存します。

#include <stdio.h> 
void main() 
{ 
int i,j; 

     /* Display the checkerboard */ 
    printf("\n\n"); 
    for (i=0;i<8;i++) 
    { 
     for (j=0;j<8;j++) 
     { 
     printf("%3d ",i*8+(j+1)); 
     } 
     printf("\n---+---+---+---+---+---+---+---\n"); 

    } 
    } 

結果:

1 2 3 4 5 6 7 8 
---+---+---+---+---+---+---+--- 
    9 10 11 12 13 14 15 16 
---+---+---+---+---+---+---+--- 
17 18 19 20 21 22 23 24 
---+---+---+---+---+---+---+--- 
25 26 27 28 29 30 31 32 
---+---+---+---+---+---+---+--- 
33 34 35 36 37 38 39 40 
---+---+---+---+---+---+---+--- 
41 42 43 44 45 46 47 48 
---+---+---+---+---+---+---+--- 
49 50 51 52 53 54 55 56 
---+---+---+---+---+---+---+--- 
57 58 59 60 61 62 63 64 
---+---+---+---+---+---+---+--- 

(ちょうど楽しみのために)より良いフレーミング

#include <stdio.h> 
void main() 
{ 
int i,j; 

    /* Display the checkerboard */ 
printf("\n\n\n|---+---+---+---+---+---+---+---+\n"); 

for (i=0;i<8;i++) 
{ 
    printf("|"); 
    for (j=0;j<8;j++) 
    { 
     printf("%2d |",i*8+(j+1)); 
    } 
    printf("\n|---+---+---+---+---+---+---+---+\n"); 

} 
と強化されたバージョン3210

}

|---+---+---+---+---+---+---+---+ 
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 
|---+---+---+---+---+---+---+---+ 
| 9 |10 |11 |12 |13 |14 |15 |16 | 
|---+---+---+---+---+---+---+---+ 
|17 |18 |19 |20 |21 |22 |23 |24 | 
|---+---+---+---+---+---+---+---+ 
|25 |26 |27 |28 |29 |30 |31 |32 | 
|---+---+---+---+---+---+---+---+ 
|33 |34 |35 |36 |37 |38 |39 |40 | 
|---+---+---+---+---+---+---+---+ 
|41 |42 |43 |44 |45 |46 |47 |48 | 
|---+---+---+---+---+---+---+---+ 
|49 |50 |51 |52 |53 |54 |55 |56 | 
|---+---+---+---+---+---+---+---+ 
|57 |58 |59 |60 |61 |62 |63 |64 | 
|---+---+---+---+---+---+---+---+ 
まだ

ないASCII技術の習得結果が、より良い:)

+0

そうですね、あなたは正しいです、それはコードをよりコンパクトにする!あなたのアスキーアートのスキルはうまくいくようです; P –

1

置き換え'xx' =>xxボードの定義:

int board[8][8] = { 
{1,2,3,4,5,6,7,8}, 
    .... 
{57,58,59,60,61,62,63,64} 
}; 

変更printfフォーマット(%c =>%2d

printf(" %2d | %2d | %2d | %2d | %2d | %2d | %2d | %2d \n", board[1][0], board[1][1], board[1][2], board[1][3], board[1][4], board[1][5], board[1][6], board[1][7]); 
.... 

注:

  • あなたはを書きますの場合、変数fooに文字 '0'の値を格納するようにコンパイラに依頼します。

    文字の値'0'は、0とは異なります。あなたがint foo = '10';を書くとき

  • は、あなたのコンパイラは'0''1'が文字であれば、'10'は何を意味するので、それは、あなたが何を意味するか理解していないことを示しています。

  • %c%dprintfに異なっている:

    • printf("%c", foo);コードがfoo

    • printf("%d", foo);foo

    • printf("%c", 'a');の値を出力するように依頼されますされた文字を印刷するのに要求されます文字を印刷するかどうかを尋ねる10
    • printf("%d", 'a');は、単一引用符で囲まれた文字の文字列を置くことができない文字a
+1

どうしてあなたは定数の隣の数だけのルックアップテーブルを持っていたいのですか?彼らの目的は四角形を列挙することなので、これらの数字は変わるとは思われません。 – Lundin

+0

ありがとう、それらの最後のメモは本当に便利です –