- 締切済み
プログラミングについての質問です
C言語で詰将棋のプログラミングをしたのですが、実行して答えを入力してもうまくいきません。どこがまちがってるのか教えていただけませんか?なおprintfを使って場を表現した部分が長すぎて4000文字に収まらないので、そこは割愛しています。 #include<stdio.h> int main(int argc, const char * argv[]){ int yoko,tate,yoko2,tate2,yoko3,tate3; char koma,koma2,koma3; printf("詰め将棋をしましょう\n"); ~printf略~ printf("持ち駒:なし\n相手の駒は玉(1二)、歩(1三)、角(1四)、飛(2五)、あなたの駒は龍(3二)、と(3一)、角(2二)です。\n\n残り3手ですが、何を動かしますか?\n"); printf("龍、と、角のいずれかを入力:"); scanf_s("%c\n", &koma); if(koma == '龍'){ printf("どこに動かしますか? (例:「9九」なら「9 9」と入力):"); scanf_s("%d %d\n",&yoko,&tate); if((yoko==2)&&(tate==1)){ ~printf略~ printf("王手です。玉を守りましょう。最長手となるように動かしてください。\n\n残り2手ですが、何を動かしますか?\n"); printf("玉、歩、角、飛のいずれかを入力:"); scanf_s("%c\n",&koma2); if(koma2=='玉'){ printf("どこに動かしますか?:"); scanf_s("%d %d\n",&yoko2,&tate2); if((yoko2==2)&&(tate2==3)){ ~printf略~ printf("残り1手です。この1手で相手を詰みにしてください。何を動かしますか?:"); printf("龍、と、角のいずれかを入力:"); scanf_s("%c\n",&koma3); if(koma3=='角'){ printf("どこに動かしますか?:"); scanf_s("%d %d\n",&yoko3,&tate3); if((yoko3==4)&&(tate3==4)){ ~printf略~ printf("あなたの勝ちです!\n"); } else{ printf("残念!\n"); } } else{ printf("残念!\n"); } } else{ printf("残念!\n"); } } else{ printf("残念!\n"); } } else{ printf("残念!\n"); } } else{ printf("残念!\n"); } return 0; }
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- wormhole
- ベストアンサー率28% (1626/5665)
>scanf_s("%c\n", &koma); ひとまず、これで'龍'や'角'がkomaに設定できてるのか確認されてはどうでしょうか。 他の回答者がいわれてる事がわかると思いますよ。
- koi1234
- ベストアンサー率53% (1866/3459)
VCですかね? こんな話もあるみたいだけど http://blogs.yahoo.co.jp/tx_b19_89_ta/19629287.html >printf("龍、と、角のいずれかを入力:"); >scanf_s("%c\n", &koma); 仮に_s付けない関数での話としても %c では表記間違ってます(型の定義から間違ってる) その後のif比較も間違ってるのは既に出てるので省略 それから見るとどこが間違ってるというか言っちゃ悪いけど 全体的に間違ってる
- wormhole
- ベストアンサー率28% (1626/5665)
>どこがまちがってるのか教えていただけませんか? 何が正しい動作なのか実際にはどう動作してしまうのか説明してくれないことには、どこが間違ってるのか探せないですよ(明らかなコーディングミスとかは別として)。 例えば >計算式の通り計算したら正しい答えになりません。計算式のどこがまちがってるのか教えてください。計算式は以下の通りです。 >計算式: x + y とたずねられた場合、あなたは間違いを答えることができますか?
- kmee
- ベストアンサー率55% (1857/3366)
> '龍' 'は複数バイトでもエラーにならないコンパイラがあります。 ただ、期待したものにはならないだろう、という点では、間違いです。
- asuncion
- ベストアンサー率33% (2127/6289)
>char koma,koma2,koma3; >if(koma == '龍'){ '龍'という定義はできないはずです。少なくとも"龍"でなければならないでしょう。 また、このif文は、「1バイト変数の」komaと'龍'とが等しいかどうかを 判断しようとしているようですが、無効です。 komaを3バイト以上の配列とし、比較にはstrcmp関数を使う必要があるでしょう。
- Tacosan
- ベストアンサー率23% (3656/15482)
具体的には, 何がどううまくいかないんですか?
補足
少し言葉が足らなかったようですね。すいません。 正しい答えならif文の中の次の状態に移行するはずが、(例えば最初に龍と入力すれば次の状態に進むようにしたい)何を入力してもelseのほうにいってしまうのです。