2017-03-27 8 views
0

コードは、私がシャア行列オーバーフロー

#include <stdio.h> 

void main() 
{ 
int i = 0;         /* Loop counter */ 
int player = 0;        /* Player number - 1 or 2 */ 
int go = 0;         /* Square selection number for turn */ 
int row = 0;         /* Row index for a square */ 
int column = 0;        /* Column index for a square */ 
int line = 0;        /* Row or column index in checking loop */ 
int winner = 0;        /* The winning player */ 
char board[8][8] = {       /* The board       */ 
        {'1','2','3','4','5','6','7','8'},    /* Initial values are reference numbers */ 
        {'9','10','11','12','13','14','15','16'},  /* used to select a vacant square for */ 
        {'17','18','19','20','21','22','23','24'},  /* a turn.        */ 
        {'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'} 
       }; 

/* The main game loop. The game continues for up to 64 turns */ 
/* As long as there is no winner       */ 
for(i = 0; i<64 && winner==0; i++) 
{ 
    /* Display the board */ 
printf("\n\n"); 
    printf(" %2c | %2c | %2c | %2c | %2c | %2c | %2c | %2c\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(" %2c | %2c | %2c | %2c | %2c | %2c | %2c | %2c\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(" %2c | %2c | %2c | %2c | %2c | %2c | %2c | %2c\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(" %2c | %2c | %2c | %2c | %2c | %2c | %2c | %2c\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(" %2c | %2c | %2c | %2c | %2c | %2c | %2c | %2c\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(" %2c | %2c | %2c | %2c | %2c | %2c | %2c | %2c\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(" %2c | %2c | %2c | %2c | %2c | %2c | %2c | %2c\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(" %2c | %2c | %2c | %2c | %2c | %2c | %2c | %2c\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]); 

を戦艦ゲームをしようとしたが、まだ初期段階にいます、非常に簡単です私は

1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 
9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 
17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 

、すべてのようなものとして出力を取得しようとしています私が取得しています何の代わりに64までの道、しかしが

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

のように... でそれだけを示し私はそれがchar board[8][8] を次の何についてです取得しています、それはすべての8つのラインこのラインで

複数のマーカーのためにあるエラーメッセージのように数

の右側に数字

-overflow in implicit constant conversion [-Woverflow] 

-multi-character character constant [-Wmultichar] 

私はc/anci-cには全く新しいので、どんな情報にも役立つので

+0

なぜ%2cを書いていますか、あなたの目標は何ですか? –

+0

これを見てくださいhttp://stackoverflow.com/questions/2806093/what-does-3d-mean-in-a-printf-statement –

+0

2は余分なスペースだけです – Enigma

答えて

0

%2s%2dをしたいと思うよういずれかの方法では、あなたのprintf文も変更が必要になりますあなたのboardそれは正確に1文字に長くなければならない含まれているすべてのものを意味し、タイプcharであること。しかし、あなたは '10'、 '11'などを割り当て、それらは2文字を含んでいます。したがって、コンパイラは2文字を1文字のcharに変換しようとします。しかし、2> 1なので、オーバーフローするので、割り当てられるのは1文字(明らかに最後の文字)だけになります。また、基本的にはシステムの一部の推測であるため、2番目のエラーメッセージも表示されます。

あなたは(もちろん数字の周りの単一引用符を削除)stringまたはintcharからあなたboardタイプを変更したいと思います。また、printf()機能が正しい形式に変更されたほうがよいでしょう。

+2

詳細:' '10 'は_2文字列ではありませんが、実装定義の振る舞いを持つ複数の文字を含む_integer文字定数_IAC、OPに必要なものではありません – chux

+0

ありがとう、@chux、私はこの事実を反映する答えを修正しています。 – SimpleBeat

0

これらは有効な文字ではありません{'17','18','19','20','21','22','23','24'},これらは2文字で構成されています。 1文字より長いテキストを格納する場合は、文字列が必要です。または、番号を必要とする場合は、単一引用符を削除する必要があります。あなたはどちらかあなたが選んだ

関連する問題