質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

820閲覧

リバーシの表示について

Natumeru

総合スコア5

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/07/05 05:48

編集2020/07/05 06:41

前提・実現したいこと

C言語で8行8列の多重loopのプログラム

発生している問題・エラーメッセージ

全て□の列と●○が入った列があるのでそこが上手くできません □□□□□□□□●○ □□□□□□□□●○ □□□□□□□□●○ □□□□□□□□●○ □□□□□□□□●○ □□□□□□□□●○ □□□□□□□□●○ □□□□□□□□●○ と表示されます

該当のソースコード

C言語

試したこと

□□□□□□□□
□□□□□□□□
□□□□□□□□
□□□●〇□□□
□□□〇●□□□
□□□□□□□□
□□□□□□□□
□□□□□□□□

と表示されるような8行8列のfor文を使った多重loopのプログラムを作りたいです。

補足
printf("□"),printf("○"),printf("●")を使用します。
for(i=0;i<8;i++){
for(j=0;j<8;j++)
}
で8行8列の表が作成できることは分かります。
printf文を使用し試しています。

補足情報(FW/ツールのバージョンなど)

Visual Studio 2019を使用しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Daregada

2020/07/05 06:12

> for(i=0;i=<8;i++){ > for(j=0;j<8;j++) > } > で8行8列の表が作成できることは分かります。 9行8列できちまいますよ。
Natumeru

2020/07/05 06:19

失礼しました。間違えて=をつけていました。これでは確かに9行8列になってしまいますね。ご指摘ありがとうございます!
Daregada

2020/07/05 06:32

質問は編集できるので、いまからでも直しておけばいいかと。さらに「該当のソースコード」のところに、「```C」の行と「```」の行の間に入るように貼り付けると見た目もよくなります。 for文の中でprintfで試したことも書いておくといいですね。 盤面の状態(それぞれのマスに○がある、●がある、何もない)を示す配列は作ってありますか。
Natumeru

2020/07/05 06:37

課題にfor文を使うとあっただけだったので配列は作ってませんでした
Daregada

2020/07/05 06:39

編集はできたようですが、「i<8」にするはずが「i=8」になってます。
Natumeru

2020/07/05 06:40

うっかりしてました
Daregada

2020/07/05 06:42 編集

ああ、提示された盤面「だけ」を表示すればいいのですね。勘違いしていました。 まずは、すべての行で「"□"」だけで盤面を表示するプログラムを作ってみるといいかと思います。 そうすれば、あとは4行目(iが3)と5行目(iが4)のときに、別の処理をすればいいですよね。
Natumeru

2020/07/05 06:44

丁寧にありがとうございます。とりあえずそれでやってみます!
Daregada

2020/07/05 06:47

それができたら、 ・4行目(iが3)で●を表示するのはjがいくつのときか ・4行目(iが3)で○を表示するのはjがいくつのときか ・5行目(iが4)で●を表示するのはjがいくつのときか ・5行目(iが4)で○を表示するのはjがいくつのときか を書き出して、それぞれの条件式を書いてみるといいですね。
Natumeru

2020/07/05 07:17

実行して確認したところ ・行がjになっている ・列がiになっている という感じでした。 自分で作成してみました #include<stdio.h> 略 { int i,j; for (i = 0; i<3; i++) { for (j = 0; j <8; j++) printf("□"); printf("\n"); } for (i = 0; i < 1; i++) { for (j = 0; j < 3; j++) printf("□"); printf("●"); printf("○"); printf("□"); printf("\n"); } for (i = 0; i < 1; i++) { for (j = 0; j < 3; j++) printf("□"); printf("○"); printf("●"); printf("□"); printf("\n"); } for (i = 0; i < 3; i++) { for (j = 0; j < 8; j++) printf("□"); printf("\n"); } return 0; } 実行結果 □□□□□□□□ □□□□□□□□ □□□□□□□□ □□□●○□ □□□○●□ □□□□□□□□ □□□□□□□□ □□□□□□□□ となりました。
Natumeru

2020/07/05 07:18

これだと”□”が足りない。少しわかりずらいかもしれないですね…
Daregada

2020/07/05 07:35

for文の中で毎回 printf("\n"); したんですね。そうではなくて、 for (i = 0; i < 8; i++) { for (j = 0; j < 8; j++) { printf("□"); } printf("\n"); } みたいにすると、1行目の□を8個表示してから改行し、2行目の□を8個表示してから改行し、と8行分の表示ができます。
Natumeru

2020/07/05 07:46 編集

アドバイスありがとうございます! 毎回してないと改行されないのかなと思ってしてました。
Daregada

2020/07/05 07:42

あとは、for文の内側で□を表示している部分を、if文にして ●, ○, □ を表示するように分岐させればできあがりです。
Natumeru

2020/07/05 07:59

うーん。if文を入れるとなると難しくなりますね…
Natumeru

2020/07/05 08:24

1行内に 最初に”□”を3文字 ”○”と”●”を1文字ずつ 最後に”□”を3文字 表示したいんですけど私の力だとすぐ出てこなくて…
Daregada

2020/07/05 08:30 編集

基本は"□"を表示するprintfでいいんです。 if (●を表示するときの条件) { printf("●"); } else if (○を表示するときの条件) { printf("○"); } else { printf("□"); } として、2つの条件をどう書けるか考えてみるといい。
Natumeru

2020/07/05 08:30

ありがとうございます!
Daregada

2020/07/05 08:31

2つの条件式は、どちらも i の値と j の値に関する複数の条件を && や || で結合したものになります。
Natumeru

2020/07/05 08:56

なんとか表示できました。ありがとうございます。
guest

回答2

0

それでは別解行きます。

C

1#include <stdio.h> 2 3int main(void) { 4 for (int i = 0; i < 8; i++) { 5 for (int j = 0; j < 8; j++) { 6 if ((i == 3 && j == 3) || (i == 4 && j == 4)) { 7 printf("●"); 8 } else if ((i == 3 && j == 4) || (i == 4 && j == 3)) { 9 printf("○"); 10 } else { 11 printf("□"); 12 } 13 } 14 printf("\n"); 15 } 16 return 0; 17}

投稿2020/07/05 09:18

Daregada

総合スコア11990

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Natumeru

2020/07/05 09:24

こういうやり方もあるんですね。今後の参考にさせていただきます! 回答ありがとうございました。
guest

0

自己解決

#include<stdio.h>

int main(void)
{
int i,j;

for (i = 0; i<3; i++) { for (j = 0; j <8; j++) printf("□"); printf("\n"); } for (i = 0; i < 1; i++) { for (j = 0; j < 8; j++) { if (j==3) { printf("●"); } else if(j==4){ printf("○"); }else{ printf("□"); } } printf("\n"); } for (i = 0; i < 1; i++) { for (j = 0; j < 8; j++) { if (j == 3) { printf("○"); }else if (j == 4) { printf("●"); }else { printf("□"); } } printf("\n"); } for (i = 0; i < 3; i++) { for (j = 0; j < 8; j++){ printf("□"); } printf("\n"); } return 0;

}

投稿2020/07/05 08:57

Natumeru

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問