C言語 ヒット・アンド・ブローについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
フリスク

C言語 ヒット・アンド・ブローについて

#1

投稿記事 by フリスク » 15年前

C言語のプログラムでヒット・アンド・ブローをやっていて、わからないところがあったので質問しに来ました

1.四個のアルファベット、AからFから四つ選んでランダムに選択して文字列にする。(選ばれる文字はすべて異なる文字)それをユーザーが当てる
2.ユーザーが入力した文字列と選択した文字列を比較して同じ場合、ヒット、違う場合、ブローとヒントを与える。
3.ユーザーは10回まで回答するチャンスが与えられる。

というプログラムを作成していたところ、アルファべットでなく数字、当たるまで終わらないというプログラムから目的のプログラムになおせません

どなたか教えてください
ソースはこれです
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 4
int main(){
int Number[N],In[N];
int i,j,hit,blow;
srand(time(NULL));
for(i=0;i<N;i++){Number=rand()%10;In=0;}
do{
printf("%d桁の数を入力!:",N);
for(i=0;i<N;i++){if((In=getchar()) ==EOF) break;
In-='0';}
fflush(stdin);hit=0,blow=0;
for(i=0;i<N;i++){if(Number==In) hit++;}
for(i=0;i<N;i++){for(j=0;j<N;j++){if(Number==In[j]) {
blow++;
break;
}}}
for(i=0;i<N;i++) printf("%d-",In);
printf("%dHit,%dBlow\n",hit,blow-hit);
}while(hit!=N);
for(i=0;i<N;i++) printf("%d",Number);
puts("\nComplete!!");
}

補足 今、なおしているんですがfflush(stdin);hit=0,blow=0;
の部分でエラーが出てしまってよくわかりません

box

Re:C言語 ヒット・アンド・ブローについて

#2

投稿記事 by box » 15年前

まずは、ヒット・アンド・ブローのルールを教えてください。
全員がルールを知っているわけではないと思います。

>fflush(stdin);hit=0,blow=0;
>の部分でエラーが出てしまってよくわかりません

何をしたときにどんなエラーが出るのですか?
なお、fflush(stdin);
つまり、標準入力に対するfflush()は動作未定義のはずです。

Poco

Re:C言語 ヒット・アンド・ブローについて

#3

投稿記事 by Poco » 15年前

えっと、問題を整理したいんですけど、
フリスクさんが提示したソースコードは、
 ・ヒット・アンド・ブローである。
 ・入力する値は数字である。
 ・当たるまで終わらない。
 ・上記仕様では正常に動作している。
という現状で、
ここから
 ・入力する値はアルファベット(A~F)である(大文字小文字区別するのかな?)。
 ・入力する回数は最大で10回である。
という風に変更したいが、どうしたらいいか分からない、

で合ってます?

パコネコ

Re:C言語 ヒット・アンド・ブローについて

#4

投稿記事 by パコネコ » 15年前

おお~
数字バージョンなら知ってる…
上のやつ起動できたけどな~?

>補足 今、なおしているんですがfflush(stdin);hit=0,blow=0;
別に変なとこないけど…「,」とか?でも起動できたし…
でもfflushって意味知らないんですよね…
意味教えてもらってもいいですか?
「組み込み関数:バッファリングデータ書き込み」って書いてたんですけど…使い方(使い道)わからなくて
すいません。勉強のためにお願いします。

ふりすく

Re:C言語 ヒット・アンド・ブローについて

#5

投稿記事 by ふりすく » 15年前

えっと・・ヒット・アンド・ブローとは、パソコンにランダムに四つの文字列を選ばせ、ユーザーが当てるゲームです。
たとえば、パソコンがACDFを選びユーザーがABCDと入力した場合、1ヒット、3ブローと表示されます

エラーというか定義されてませんと出ます・・・


・入力する値はアルファベット(A~F)である(大文字のみです)。
 ・入力する回数は最大で10回である。
という風に変更したいが、どうしたらいいか分からない、

で合ってます。何日も考えてるんですが全然作れなくて明日か明後日までに作りたいんですが・・よろしくお願いします

パコネコ

Re:C言語 ヒット・アンド・ブローについて

#6

投稿記事 by パコネコ » 15年前

名前間違えてますよ?
平仮名になってしまってます。
名前などを保存する押したら楽ですよ。

それともまさかの別人?

Re:C言語 ヒット・アンド・ブローについて

#7

投稿記事 by » 15年前

fflushは確か二文字目を正確に入力するために必要なものだったような気がします

フリスク

Re:C言語 ヒット・アンド・ブローについて

#8

投稿記事 by フリスク » 15年前

あっ・・同一人物です

Poco

Re:C言語 ヒット・アンド・ブローについて

#9

投稿記事 by Poco » 15年前

> たとえば、パソコンがACDFを選びユーザーがABCDと入力した場合、1ヒット、3ブローと表示されます

1ヒット、2ブローですよね?

> ・入力する値はアルファベット(A~F)である(大文字のみです)。

簡単な修正で済ますなら、A~Fを0~5(1~6)と見なせば良いです。
これなら、入力する値を変換するだけで行けます(A→1、B→2、…)。

> ・入力する回数は最大で10回である。
試行回数を格納する変数を用意して、do-while文の継続条件(もしくは文中)で試行回数が10回を超えていないかチェックするだけです。

フリスク

Re:C言語 ヒット・アンド・ブローについて

#10

投稿記事 by フリスク » 15年前

1ヒット、2ブローですね

簡単な修正で済ますなら、A~Fを0~5(1~6)と見なせば良いです。
これなら、入力する値を変換するだけで行けます(A→1、B→2、…)。

ってことは最初のプログラムを書きなおすだけじゃできないんですか?

試行回数を格納する変数を用意して、do-while文の継続条件(もしくは文中)で試行回数が10回を超えていないかチェックするだけです

上のプログラムをどう変更すればいいんですか?

パコネコ

Re:C言語 ヒット・アンド・ブローについて

#11

投稿記事 by パコネコ » 15年前

>ってことは最初のプログラムを書きなおすだけじゃできないんですか?
簡単な修正って書いてるじゃないですか?
if文を使うのが一番わかりやすい・・・でもcharで宣言したもので一旦受け取らないとだめな気がします。
それから変換したらどうでしょうか?

パコネコ

Re:C言語 ヒット・アンド・ブローについて

#12

投稿記事 by パコネコ » 15年前

>}while(hit!=N);
数えるならこの部分に条件をつけ足せばOKだと思います。
たとえば
cnt++;
}while(hit!=N || cnt<10);

のような感じで…

フリスク

Re:C言語 ヒット・アンド・ブローについて

#13

投稿記事 by フリスク » 15年前

実はまだまだ初心者に近くてあまり理解が追いつけなくて・・すみません

パコネコ

Re:C言語 ヒット・アンド・ブローについて

#14

投稿記事 by パコネコ » 15年前

>In-='0';
勉強不足でよくわからなかったのですが、
この処理って数字に直してるんですか?
文字コード表覚えてなくて…

=============
こちらこそ勉強不足ですいません 画像

Poco

Re:C言語 ヒット・アンド・ブローについて

#15

投稿記事 by Poco » 15年前

> >In-='0';
> 勉強不足でよくわからなかったのですが、
> この処理って数字に直してるんですか?
> 文字コード表覚えてなくて…

数字を数値に変換しています。
数字'0'~'9'までは連続していますので、例えば'7'は
'7'-'0'=7となります。 画像

フリスク

Re:C言語 ヒット・アンド・ブローについて

#16

投稿記事 by フリスク » 15年前

確かそうだと・・

パコネコ

Re:C言語 ヒット・アンド・ブローについて

#17

投稿記事 by パコネコ » 15年前

そうですか!
ありがとうございます。
それならA~Fなども連続してるのでif文使わなくても変換できそうですね。
え~と、小文字が間に入るんでしたっけ?そしてその前に数字があって…それを数値に変換ですか?
文字コードは難しいですね…夏休み中に覚えなくては…あ、上のは適当です。

パコネコ

Re:C言語 ヒット・アンド・ブローについて

#18

投稿記事 by パコネコ » 15年前

大文字の後に小文字でした…
1~Aまでは16文字、表では隣になってますね。
'A'-あれ?
16?'DLE'?どっちでしょう?どっちでもないかな?
とりあえずそれから-'0'でできますかね?
===========
あれ?「!」かな?
=======
違いました。
文字コードで16ずらせばいいんですが…あ、わかりました
下に書きます
画像

フリスク

Re:C言語 ヒット・アンド・ブローについて

#19

投稿記事 by フリスク » 15年前

うーん・・難しい

パコネコ

Re:C言語 ヒット・アンド・ブローについて

#20

投稿記事 by パコネコ » 15年前

数字の’0’を引くってことは、
文字コードの前に数値があるんですよね。
つまり’A’のひとつ前の’@’を引けばいいんですね。
どうでしょう?
自信ありです(^^♪)
============
書き忘れてた…
つまり'A'-'@'=1ってことですよね。
'B'-'@'=2
'C'-'@'=3…

画像

ドラ

Re:C言語 ヒット・アンド・ブローについて

#21

投稿記事 by ドラ » 15年前

>1.四個のアルファベット、AからFから四つ選んでランダムに選択して文字列にする。
>(選ばれる文字はすべて異なる文字
元のソースコードには重複を回避する処理が存在しませんので、
これについても考える必要がありそうです。

ISLe

Re:C言語 ヒット・アンド・ブローについて

#22

投稿記事 by ISLe » 15年前

C言語的には'A'~'Z'(小文字も)は連続している保証がないんですよね。

連続していない文字コードを採用しているプラットフォームもあるのです。
パソコンでお目にかかることはないと思いますけど。

パコネコ

Re:C言語 ヒット・アンド・ブローについて

#23

投稿記事 by パコネコ » 15年前

そーなんですか?
文字コード表見ながらやったのに…

ISLe

Re:C言語 ヒット・アンド・ブローについて

#24

投稿記事 by ISLe » 15年前

> 文字コード表見ながらやったのに…

アルファベットが連続している前提なら
'A'-'A'+1 → 1
'B'-'A'+1 → 2
'C'-'A'+1 → 3
としたほうが'A'の前が何かとか気にしなくて済みますよ。

プラットフォーム限定と断ってやれば良いですし。

パコネコ

Re:C言語 ヒット・アンド・ブローについて

#25

投稿記事 by パコネコ » 15年前

結局数値を足すことできたんですね。

フリスク

Re:C言語 ヒット・アンド・ブローについて

#26

投稿記事 by フリスク » 15年前

すみません

寝ちゃってました

フリスク

Re:C言語 ヒット・アンド・ブローについて

#27

投稿記事 by フリスク » 15年前

やっぱりぜんぜんできません

今日までに作りたいんで協力してくれると助かります

ookami

Re:C言語 ヒット・アンド・ブローについて

#28

投稿記事 by ookami » 15年前

老婆心ながら一応フリスクさんに言っておきますが、

「どうがんばった結果わからないのか」を書かなければ、切実さは伝わりません。

少なくとも私には伝わってきませんでした。

フリスク

Re:C言語 ヒット・アンド・ブローについて

#29

投稿記事 by フリスク » 15年前

数値を文字(アルファベット)に変換する方法を調べていたのですが・・理解できないものが多くて

ドラ

Re:C言語 ヒット・アンド・ブローについて

#30

投稿記事 by ドラ » 15年前

> 数値を文字(アルファベット)に変換する方法
こんな感じでいいのではないですか?
文字列リテラルのn番目の文字を参照しているので、文字コードが
連続しているかどうかなど関係ありません。

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

int main(void)
{
int i;

srand((unsigned)time(NULL));

for (i = 0; i < 20; i++)
{
printf( "%c ", "ABCDEF"[rand()%6] );
}
putchar('\n');

return 0;
}

パコネコ

Re:C言語 ヒット・アンド・ブローについて

#31

投稿記事 by パコネコ » 15年前

そんなことできるんですね。
で、結局アルファベットを数値に変換はできたんですか?
できたんならいいですけど…

数値をアルファベットには「ドラ」さんのでできそうですね。
ドラさん勉強になりました。

フリスク

Re:C言語 ヒット・アンド・ブローについて

#32

投稿記事 by フリスク » 15年前

いまからやってみます

だいちゃん

Re:C言語 ヒット・アンド・ブローについて

#33

投稿記事 by だいちゃん » 15年前

>数値を文字(アルファベット)に変換する方法を調べていたのですが・・理解できないものが多くて

ならばせめて
調べて見つけた方法をここに転記して

>こういう方法を見つけたんですがどういう処理を行っているのか
>コードを見るだけでは理解できないので教えてください

くらいは書けますよね?

パコネコ

Re:C言語 ヒット・アンド・ブローについて

#34

投稿記事 by パコネコ » 15年前

そういえば
昨日までに作りたかったとか書いてた気が…

閉鎖

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