迷路を作っているのですが、デバッグしたときにすぐに消えてしまいます。どうすれば表示したままに出来るか教えていただきたいです。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
yui
記事: 1
登録日時: 3年前

迷路を作っているのですが、デバッグしたときにすぐに消えてしまいます。どうすれば表示したままに出来るか教えていただきたいです。

#1

投稿記事 by yui » 3年前

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

//どちらも5以上の奇数にすること。
#define max_y 25
#define max_x 25

int main(void)
{
int field[max_y][max_x]; //フィールド(0が通路で、1が壁。)
int y; //フィールド配列の縦の要素番号
int x; //フィールド配列の横の要素番号
int r; //乱数の値

srand((unsigned)time(NULL)); //乱数の仕組みを初期化。

//通路(0)の生成
for (y = 0; y < max_y; y = y + 1) //フィールドの縦幅の分だけループする。
{
for (x = 0; x < max_x; x = x + 1) //フィールドの横幅の分だけループする。
{
field[y][x] = 0;
}
}

//上下の外壁(1)の生成
for (x = 0; x < max_x; x = x + 1) //フィールドの横幅の分だけループする。
{
field[0][x] = 1;
field[max_y - 1][x] = 1;
}

//左右の外壁(1)の生成
for (y = 0; y < max_y; y = y + 1) //フィールドの縦幅の分だけループする。
{
field[y][0] = 1;
field[y][max_x - 1] = 1;
}

//棒倒し法を使った壁(1)の生成(1行めのみ)
y = 2; //1行め
for (x = 2; x < max_x - 1; x = x + 2) //xの要素番号2から要素番号max_x-1まで、1マス飛ばしで棒倒し。
{
r = (rand() % 12) + 1; //乱数生成(r = 1から12のランダムな値)
field[y][x] = 1; //中心から……
if (r >= 1 && r <= 3) //rが1から3のとき
{
if (field[y - 1][x] == 0) //上に棒(壁)がなければ
{
field[y - 1][x] = 1; //上に棒を倒す。
}
else if (field[y - 1][x] == 1) //上に棒(壁)があれば
{
x = x - 2; //棒を倒さずに、乱数生成をやり直す。
}
}
if (r >= 4 && r <= 6) //rが4から6のとき
{
if (field[y + 1][x] == 0) //下に棒(壁)がなければ
{
field[y + 1][x] = 1; //下に棒を倒す。
}
else if (field[y + 1][x] == 1) //下に棒(壁)があれば
{
x = x - 2; //棒を倒さずに、乱数生成をやり直す。
}
}
if (r >= 7 && r <= 9) //rが7から9のとき
{
if (field[y][x - 1] == 0) //左に棒(壁)がなければ
{
field[y][x - 1] = 1; //左に棒を倒す。
}
else if (field[y][x - 1] == 1) //左に棒(壁)があれば
{
x = x - 2; //棒を倒さずに、乱数生成をやり直す。
}
}
if (r >= 10 && r <= 12) //rが10から12のとき
{
if (field[y][x + 1] == 0) //右に棒(壁)がなければ
{
field[y][x + 1] = 1; //右に棒を倒す。
}
else if (field[y][x + 1] == 1) //右に棒(壁)があれば
{
x = x - 2; //棒を倒さずに、乱数生成をやり直す。
}
}
}

//棒倒し法を使った壁(1)の生成(2行め以降)
for (y = 4; y < max_y - 1; y = y + 2) //yの要素番号4から要素番号max_y-1まで、1マス飛ばしで棒倒し。
{
for (x = 2; x < max_x - 1; x = x + 2) //xの要素番号2から要素番号max_x-1まで、1マス飛ばしで棒倒し。
{
r = (rand() % 12) + 1; //乱数生成(r = 1から12のランダムな値)
field[y][x] = 1; //中心から……
if (r >= 1 && r <= 4) //rが1から4のとき
{
if (field[y + 1][x] == 0) //下に棒(壁)がなければ
{
field[y + 1][x] = 1; //下に棒を倒す。
}
else if (field[y + 1][x] == 1) //下に棒(壁)があれば
{
x = x - 2; //棒を倒さずに、乱数生成をやり直す。
}
}
if (r >= 5 && r <= 8) //rが5から8のとき
{
if (field[y][x - 1] == 0) //左に棒(壁)がなければ
{
field[y][x - 1] = 1; //左に棒を倒す。
}
else if (field[y][x - 1] == 1) //左に棒(壁)があれば
{
x = x - 2; //棒を倒さずに、乱数生成をやり直す。
}
}
if (r >= 9 && r <= 12) //rが9から12のとき
{
if (field[y][x + 1] == 0) //右に棒(壁)がなければ
{
field[y][x + 1] = 1; //右に棒を倒す。
}
else if (field[y][x + 1] == 1) //右に棒(壁)があれば
{
x = x - 2; //棒を倒さずに、乱数生成をやり直す。
}
}
}
}

field[0][1] = 0; //スタート地点の壁を撤去する。
field[max_y - 1][max_x - 2] = 0; //ゴール地点の壁を撤去する。

//結果表示
for (y = 0; y < max_y; y = y + 1) //フィールドの縦幅の分だけループする。
{
for (x = 0; x < max_x; x = x + 1) //フィールドの横幅の分だけループする。
{
if (field[y][x] == 0) //通路なら
{
printf("%2s", " "); //空白で表す。
}
else if (field[y][x] == 1) //壁なら
{
printf("%2s", "■"); //四角形で表す。
}
}
printf("\n"); //行の終了時点で改行する。
}

return(0);
}

サイトを見ながらまねしたのですが表示されてもすぐに消えてしまいます消えないようにするにはどうしたらいいですか?。どなたか教えてください。
添付ファイル
Source.cpp
(4.04 KiB) ダウンロード数: 99 回

アバター
usao
記事: 1887
登録日時: 11年前

Re: 迷路を作っているのですが、デバッグしたときにすぐに消えてしまいます。どうすれば表示したままに出来るか教えていただきたいです。

#2

投稿記事 by usao » 3年前

「すぐに消える」の意味が不明瞭だが,
「プログラムが即終了してしまうためにprintfの結果を見ることができない」という話なら,
main関数末尾のreturnの直前に getchar(); とでも書いておけばどうか.
あるいはリダイレクトでファイルに出してやるとか.

アバター
あたっしゅ
記事: 664
登録日時: 13年前
住所: 東京23区
連絡を取る:

Re: 迷路を作っているのですが、デバッグしたときにすぐに消えてしまいます。どうすれば表示したままに出来るか教えていただきたいです。

#3

投稿記事 by あたっしゅ » 3年前

Windows だと仮定すると、
(1)Microsoft Visual Studio 2019 を使う。
(2)https://www.embarcadero.com/jp/free-too ... e-download Embarcadero Dev-C++ を使う。
(3)最後の return(0); の前位に、getchar(); を挿入する。
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。

中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。

返信

“C言語何でも質問掲示板” へ戻る