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

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

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

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

2回答

8488閲覧

数あてゲームが思い通りに動作しません。初心者の単純なプログラムです。

roun

総合スコア10

C

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2017/07/09 13:50

###前提・実現したいこと
c言語で「1から100までの数字を当てる数あてゲーム」を作っています。この本に乗っているサンプルコードを丸写ししました。
https://www.amazon.co.jp/dp/B01AWPJ7DS/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1
1から100までの数字をパソコンがランダムに決め、その数字を遊ぶ人が当てるゲームです。
入力した数字が答えより大きいか小さいかを表示したり、正解したときは「お見事!」「x回目で正解です!」という文章を表示させたりしたいです。
###発生している問題・エラーメッセージ
答えとなる数字が、何度やっても「42」になります。プログラムを再起動しても変わりません。(ググったのですが、これはrand関数の仕様で、正常なのでしょうか?初心者なので、全くわかりません。)

また、42を入力しても、「お見事!」「x回目で正解です!」という文章が表示されません。

数あてゲームです! 私が考えた数字を当てられるでしょうか?(1~100) 答えはいくつでしょう?>41 もっと大きい! 答えはいくつでしょう?>43 もっと小さい! 答えはいくつでしょう?>42 答えはいくつでしょう?>42 答えはいくつでしょう?>

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

c言語

1 2#include <stdio.h> 3#include <stdlib.h> 4 5int main(void) { 6 int answer; 7 char x[5]; 8 int isGamePlay = 1; 9 int count = 0; 10 int input; 11 12 //答えをランダムに生成 13 answer = rand() % 100 + 1; 14 15 printf("数あてゲームです!\n"); 16 printf("私が考えた数字を当てられるでしょうか?(1~100)\n"); 17 //逆スラッシュをこのフォントで入力しようとすると\になる 18 19 while (isGamePlay) { 20 count = count + 1; 21 printf("答えはいくつでしょう?>"); 22 fgets(x, 4, stdin); 23 input = atoi(x); 24 25 //範囲外の数値が入力されたとき 26 if (input < 1 || input > 100) { 27 printf("1から100までの数字を入力してください!\n"); 28 continue; 29 } 30 //正解のとき 31 if (input == answer) { 32 isGamePlay == 0; 33 } 34 35 //答えより大きかったとき 36 if (input > answer) { 37 printf("もっと小さい!\n"); 38 } 39 40 //答えより小さかったとき 41 if (input < answer) { 42 printf("もっと大きい!\n"); 43 } 44 } 45 46 printf("お見事!\n"); 47 printf("%d 回目で正解です!", count); 48 49 return 0; 50} 51 52

###試したこと
本のサンプルコードと自分が書いたコードを良く見比べてみたのですが、間違っているところはないように思えます。間違いを見落としているのか、そもそもサンプルコードが間違っているのかわかりません。

###補足情報(言語/FW/ツール等のバージョンなど)
microsoft visual studio 2017を使用しました。バージョンなどの細かいことはわかりません。イメージ説明

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

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

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

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

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

guest

回答2

0

ベストアンサー

isGamePlay == 0;
これでいいのですか?

投稿2017/07/09 13:58

HogeAnimalLover

総合スコア4830

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

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

yumetodo

2017/07/09 14:01

ああ、追記しようとしたらすでに書かれていた・・・
roun

2017/07/09 14:10

それです!全く気づきませんでした!ありがとうございます!
guest

0

rand関数を用いるときは必ずsrand関数でseedを初期化しましょう。

rand関数は擬似的な乱数を生成します。これは同じseedに対して常に同じ乱数列を生成することを意味します。

つまり真の乱数をseedにする必要があります。真の乱数に何を採用するかは用途によって議論を呼びますが、とりあえず乱数っぽいものとしてはtime関数が返す値なんかがいいでしょう。

投稿2017/07/09 13:57

編集2017/07/09 14:00
yumetodo

総合スコア5850

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

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

roun

2017/07/09 14:02

ありがとうございます。srand関数でググると、分かりやすいサイトが出てきました。助かりました。
roun

2017/07/09 14:12

すいません。理解したと思ったら、やっぱり難しくてわかりませんでした。 このプログラムの場合は、どのように書けばよいのでしょうか? 教えていただけないでしょうか。
roun

2017/07/09 14:26

コードを書き換えたら、毎回ランダムに答えが決まるようになりました。本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問