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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Q&A

解決済

3回答

1531閲覧

for文?何を使えば実行結果になるかわかりません。

K_K

総合スコア11

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

0グッド

0クリップ

投稿2017/02/05 15:35

編集2017/02/06 12:26

###前提・実現したいこと
(「」内の0は踏んでいないところ、1は踏んだところです。)
一次元マインスイーパーの作成
1.プログラム側で0から9までの整数をランダムに二つ選ぶ.(これが地雷の位置となる.)
2.「0~9」までの整数を入力してください:」と表示する.
3.キーボードより整数を入力する.
4.入力された整数によって,以下の処理を行う.
A) 1で選んだ整数と同じであれば「地雷を踏みました!!」と表示してゲームを終了
する.
B) A)以外の場合は,「0000010000」のようにこれまで入力をした場所に関する情報
を表示して2へ戻る.
ここで,*はまだ入力されていない場所, ○は入力を受け付けたが地雷がなかった場
所。
C) 地雷の場所以外全ての場所を試したら,「おめでとうございます.全ての地雷を特
定しました.」と表示してゲーム終了する.
■ 実行結果例
「0~9」までの整数を入力してください.:5
「0000010000」
「0~9」までの整数を入力してください.:1
「0100010000」
「0~9」までの整数を入力してください.:3
「0101010000」
「0~9」までの整数を入力してください.:9
「0101010001」
「0~9」までの整数を入力してください.:8
「0101010011」
「0~9」までの整数を入力してください.:7
「0101010111」
「0~9」までの整数を入力してください.:6
地雷を踏みました.
という条件のもと実行結果を出したいです。
ワイル文やdoワイル文などは習ってなくfor文、if文、あとは常識の範囲の文(scan,printfなど)しか使えません。

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

エラーメッセージ

###該当のソースコード

#include<stdio.h> #include<time.h> #include<stdlib.h> int main(void) { int a,b,c,d,e,f; srand(time(NULL)); a=rand()%9+1; b=rand()%9+1; for(d=1;d<=10;d++) { printf("「0〜9」までの整数を入力してください:"); scanf("%d",&e); for(f=1;f<=10;f++) { if(e==a||e==b) { printf("地雷を踏みました\n"); break; } else if(f==e) { e++; printf("○ "); } else { e++; printf("*"); } } printf("\n"); } return 0; }

###試したこと
上記のことを試してみました。

###補足情報(言語/FW/ツール等のバージョンなど)
できれば、実行結果になるソースコードではなく、その実行結果になるまでの過程をヒント形式で答えてくれるとありがたいです。

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

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

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

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

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

Chironian

2017/02/05 16:18

実行結果例を ''' で囲んで下さい。Markdownにより**が太字指定へ変換されてしまうので*の数が可笑しくなっています。
guest

回答3

0

ベストアンサー

・10個の配列が必要(入力済みの位置を覚えておくため)
・入力できる範囲は10個で、内2個は爆弾なので、最大8回ループさせればよい
但し、入力済みの場合の処理は必要

簡単に書くとこんな流れでしょうか。

c

1配列[10] 2爆弾の位置決定 3for(8回ループ){ 4 入力 5 配列と比較して入力済みチェック 6 爆弾の位置と比較 7 同じ→地雷を踏みました 8 異なる→配列に格納 9} 10地雷を踏まなかった→おめでとうございます

それから、気になる箇所があったので指摘しておきます。
rand()%9+1では、1~9になりそう。rand()%10で良いのでは。
if(e==a|e==b) ORの書き方が違います。||です。

投稿2017/02/05 23:55

編集2017/02/05 23:57
ttyp03

総合スコア16996

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

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

K_K

2017/02/06 12:20

コメント失礼します。 配列についてまだ少し理解ができていないので、簡潔にいいので教えていただけませんか?
ttyp03

2017/02/06 23:23

では超簡潔に。 例えば、 int a[10]; と宣言すれば10個の箱が用意されます。 1番目の箱はa[0]、10番目の箱はa[9]になります。
guest

0

・a=bの場合に地雷が一つになるので対策する。
・一度踏んだところを覚える、さらに表示に使用するかために文字列を使用する。

元ソースをベースにしてますが、変数定義や文法は適切に修正を、、、

c

1srand(time(NULL)); 2a=rand()%10; 3for( b=a; a==b; ) 4{ 5 b=rand()%10; 6} 7 8char g[11] ="**********"; 9int e=0; 10for( f = 0; f < 8; ){ 11 scanf("%d",&e); 12 if(e==a||e==b){ 13 break; 14 }else if( g[e] == '*' ){ 15 g[e] == 'O'; 16 f++; 17 } 18 puts(g); 19} 20if( f==8 ){ 21 おめでとう 22}else{ 23 地雷爆発 24}

投稿2017/02/05 23:56

編集2017/02/06 00:21
hikochang

総合スコア648

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

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

0

ルールがよくわかりませんが、一度踏んだ所を覚えておく必要がありますね。
0 からの数字ということは配列を使えということでは?

投稿2017/02/05 22:56

Zuishin

総合スコア28656

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問