どこが間違えているかがわかりません。
どこが間違えているかがわかりません。
初めまして、XTLといいます。
問題
数字当てゲームHit & Blowなんですが
1)コンピューターが4桁の数字(0-9まで)を考える関数
2)ユーザーが考えた4桁の数字、仮に1234であれば、1235なら3hit0chip
3)10回以内にクリアーを目指す。
4)0以下、10000以上なら強制終了。
わからない点が、2)の1223という問題のときに、1233とやったばあい、3hit1chipとなり、おかしな内容になります。
そこを直したいのですが、宜しくお願い致します。
下が作ったソースです。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void)
{
int ans[4],count[4];
int hit(int ans[4],int count[4];
int blow(int ans[4],int count[4];
int hitblow(int ans[4],int count[4];
int guess;
int hitresult;
int blowresult;
int hitblow;
int i;
char str[9]
srand( (unsigned)time( NULL ) );
ans[3]=rand()%10
ans[2]=rand()%10
ans[1]=rand()%10
ans[0]=rand()%10
printf("hit & blow")
for (i=10 ;i<10,i+1);
{
printf("%D",i+1);
printf("回数");
fgets(str,sizeof(str),stdin);
guess=atoi(str);
count[0]=guess%10;
count[1]=(guess/10)%10;
count[2]=(guess/100)%10;
count[3]=(guess/1000)%10;
hitresult = hit(ans,count);
blowresult = blow(ans,count);
hitblowresult = hitblow(ans,count);
if(hitresult==4)
{
printf("正解");
break;
}else{
printf("%d",hit%dchip.¥n,hitresult,chipresult,hitchipresult);
}
}
printf(正解は%d%d%d%dです¥n",ans{3},ans{2},ans{1},ans{0}),
}
int hit(int ans[4],int count[4]
{
int i;
int hit=0
for(int i=0;i<4;i++){
if(ans{i}=count{i}){
hit++;
}
}
return hit;
}
int blow(int ans[4],int count[4];
{
int i;
int j:
int blow=0;
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(i! = j&&ans==count)
blow++;
break;
}
}
}
return blow;
}
int hitblow(int ans[4],int count[4];
{
int hitblow=0;
int i;
int j;
{
for(int i=0;i<4;i++){
if(ans==count){
for(int j=0;j<4;j++){
if(i! = j&&ans==count)
hitblow++;
break;
}
}
}
return hitblow;
}
問題
数字当てゲームHit & Blowなんですが
1)コンピューターが4桁の数字(0-9まで)を考える関数
2)ユーザーが考えた4桁の数字、仮に1234であれば、1235なら3hit0chip
3)10回以内にクリアーを目指す。
4)0以下、10000以上なら強制終了。
わからない点が、2)の1223という問題のときに、1233とやったばあい、3hit1chipとなり、おかしな内容になります。
そこを直したいのですが、宜しくお願い致します。
下が作ったソースです。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void)
{
int ans[4],count[4];
int hit(int ans[4],int count[4];
int blow(int ans[4],int count[4];
int hitblow(int ans[4],int count[4];
int guess;
int hitresult;
int blowresult;
int hitblow;
int i;
char str[9]
srand( (unsigned)time( NULL ) );
ans[3]=rand()%10
ans[2]=rand()%10
ans[1]=rand()%10
ans[0]=rand()%10
printf("hit & blow")
for (i=10 ;i<10,i+1);
{
printf("%D",i+1);
printf("回数");
fgets(str,sizeof(str),stdin);
guess=atoi(str);
count[0]=guess%10;
count[1]=(guess/10)%10;
count[2]=(guess/100)%10;
count[3]=(guess/1000)%10;
hitresult = hit(ans,count);
blowresult = blow(ans,count);
hitblowresult = hitblow(ans,count);
if(hitresult==4)
{
printf("正解");
break;
}else{
printf("%d",hit%dchip.¥n,hitresult,chipresult,hitchipresult);
}
}
printf(正解は%d%d%d%dです¥n",ans{3},ans{2},ans{1},ans{0}),
}
int hit(int ans[4],int count[4]
{
int i;
int hit=0
for(int i=0;i<4;i++){
if(ans{i}=count{i}){
hit++;
}
}
return hit;
}
int blow(int ans[4],int count[4];
{
int i;
int j:
int blow=0;
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(i! = j&&ans==count)
blow++;
break;
}
}
}
return blow;
}
int hitblow(int ans[4],int count[4];
{
int hitblow=0;
int i;
int j;
{
for(int i=0;i<4;i++){
if(ans==count){
for(int j=0;j<4;j++){
if(i! = j&&ans==count)
hitblow++;
break;
}
}
}
return hitblow;
}
Re: どこが間違えているかがわかりません。
プログラムの方を読ませていただきました。まずハッカーさんのおっしゃるとおり,このままだとエラーが結構出ます(主に;忘れや)忘れなど)。一番の問題は使われていない変数chipresultとかhitchipresultが使われているところです。(自分はこれをblowresult,hitblowresultとしてとらえました。)
このままだとプログラム自体もあまり分からないので、そこは直してください。あともう少しルールのほうを詳しく説明してください。(とくにchipが何を示すのかを)
このままだとプログラム自体もあまり分からないので、そこは直してください。あともう少しルールのほうを詳しく説明してください。(とくにchipが何を示すのかを)
Re: どこが間違えているかがわかりません。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void)
{
int ans[4],count[4];
int hit(int ans[4],int count[4];
int blow(int ans[4],int count[4];
int hitblow(int ans[4],int count[4];
int guess;
int hitresult;
int blowresult;
int hitblow;
int i;
char str[9]
srand( (unsigned)time( NULL ) );
ans[3]=rand()%10
ans[2]=rand()%10
ans[1]=rand()%10
ans[0]=rand()%10
printf("hit & blow")
for (i=10 ;i<10,i+1);
{
printf("%D",i+1);
printf("回数");
fgets(str,sizeof(str),stdin);
guess=atoi(str);
count[0]=guess%10;
count[1]=(guess/10)%10;
count[2]=(guess/100)%10;
count[3]=(guess/1000)%10;
hitresult = hit(ans,count);
blowresult = blow(ans,count);
hitblowresult = hitblow(ans,count);
if(hitresult==4)
{
printf("正解");
break;
}else{
printf("%d",hit%dblow.¥n,hitresult,blowresult,hitblowresult);
}
}
printf(正解は%d%d%d%dです¥n",ans{3},ans{2},ans{1},ans{0}),
}
int hit(int ans[4],int count[4]
{
int i;
int hit=0
for(int i=0;i<4;i++){
if(ans{i}=count{i}){
hit++;
}
}
return hit;
}
int blow(int ans[4],int count[4]);
{
int i;
int j:
int blow=0;
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(i! = j&&ans==count)
blow++;
break;
}
}
}
return blow;
}
int hitblow(int ans[4],int count[4];
{
int hitblow=0;
int i;
int j;
{
for(int i=0;i<4;i++){
if(ans==count){
for(int j=0;j<4;j++){
if(i! = j&&ans==count)
hitblow++;
break;
}
}
}
return hitblow;
}
codeタグがわかりませんでした。
訂正個所を直しました。
#include<stdlib.h>
#include<time.h>
int main(void)
{
int ans[4],count[4];
int hit(int ans[4],int count[4];
int blow(int ans[4],int count[4];
int hitblow(int ans[4],int count[4];
int guess;
int hitresult;
int blowresult;
int hitblow;
int i;
char str[9]
srand( (unsigned)time( NULL ) );
ans[3]=rand()%10
ans[2]=rand()%10
ans[1]=rand()%10
ans[0]=rand()%10
printf("hit & blow")
for (i=10 ;i<10,i+1);
{
printf("%D",i+1);
printf("回数");
fgets(str,sizeof(str),stdin);
guess=atoi(str);
count[0]=guess%10;
count[1]=(guess/10)%10;
count[2]=(guess/100)%10;
count[3]=(guess/1000)%10;
hitresult = hit(ans,count);
blowresult = blow(ans,count);
hitblowresult = hitblow(ans,count);
if(hitresult==4)
{
printf("正解");
break;
}else{
printf("%d",hit%dblow.¥n,hitresult,blowresult,hitblowresult);
}
}
printf(正解は%d%d%d%dです¥n",ans{3},ans{2},ans{1},ans{0}),
}
int hit(int ans[4],int count[4]
{
int i;
int hit=0
for(int i=0;i<4;i++){
if(ans{i}=count{i}){
hit++;
}
}
return hit;
}
int blow(int ans[4],int count[4]);
{
int i;
int j:
int blow=0;
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(i! = j&&ans==count)
blow++;
break;
}
}
}
return blow;
}
int hitblow(int ans[4],int count[4];
{
int hitblow=0;
int i;
int j;
{
for(int i=0;i<4;i++){
if(ans==count){
for(int j=0;j<4;j++){
if(i! = j&&ans==count)
hitblow++;
break;
}
}
}
return hitblow;
}
codeタグがわかりませんでした。
訂正個所を直しました。
- bitter_fox
- 記事: 607
- 登録日時: 14年前
- 住所: 大阪府
Re: どこが間違えているかがわかりません。
codeタグはフォーラムルールを参考にしてください。xtl さんが書きました: codeタグがわかりませんでした。
訂正個所を直しました。
また、載せていただいたソースコードでもコンパイルエラーが発生してしまいます。
コンパイルエラーの原因と恐らく誤りである点を列挙します。
int hit(int ans[4],int count[4];
^閉じ括弧がない
int blow(int ans[4],int count[4];
^閉じ括弧がない
int hitblow(int ans[4],int count[4];
^閉じ括弧がない
char str[9]
^;がない
srand( (unsigned)time( NULL ) );
ans[3]=rand()%10
ans[2]=rand()%10
ans[1]=rand()%10
ans[0]=rand()%10
^;がない
printf("hit & blow")
^;がない
printf("%d",hit%dblow.¥n,hitresult,blowresult,hitblowresult);
^blowの誤り?
^不正な文字.¥n(ちなみに\が全角)
//もしかしたら文字列リテラルの範囲が間違っている?
printf(正解は%d%d%d%dです¥n",ans{3},ans{2},ans{1},ans{0}),
^"がない ^\が全角になっている
^ ^ ^ ^ ^ ^ ^ ^恐らく[]の誤り
^恐らく;
int hit(int ans[4],int count[4]
^閉じ括弧がない
{
int i;
int hit=0
^;がない
for(int i=0;i<4;i++){
^C言語としてコンパイルするなら問題あり
if(ans{i}=count{i}){
^ ^ ^ ^恐らく[]の誤り
^恐らく不正な代入
int blow(int ans[4],int count[4]);
^不正な;
{
int i;
int j:
^恐らく;の誤り
int blow=0;
for(int i=0;i<4;i++){
^C言語としてコンパイルするなら問題あり
for(int j=0;j<4;j++){
^C言語としてコンパイルするなら問題あり
if(i! = j&&ans[i]==count[i])
^恐らく!=の誤り
blow++;
^++が全角
break;
}
^}の数があっていない(恐らくifブロックに{が無い)
}
}
return blow;
}
int hitblow(int ans[4],int count[4];
^閉じ括弧がない・不正な;
{
int hitblow=0;
int i;
int j;
{
^(*1)
for(int i=0;i<4;i++){
^C言語としてコンパイルするなら問題あり
if(ans[i]==count[i]){
for(int j=0;j<4;j++){
^C言語としてコンパイルするなら問題あり
if(i! = j&&ans[i]==count[i])
^(*2)
^恐らく!=の誤り
hitblow++;
^++が全角
break;
}
^}の数があっていない(恐らく(*1)の{が不要で(*2)に{がない)
}
}
return hitblow;
}
[hr][追記]
これに対してもお答えくださいね。N.M さんが書きました: あともう少しルールのほうを詳しく説明してください。(とくにchipが何を示すのかを)
Re: どこが間違えているかがわかりません。
そもそも、
質問者さんがおかしいと言ってる内容がおかしくないわけですが。
#chipがブローのことだとしてXTL さんが書きました:わからない点が、2)の1223という問題のときに、1233とやったばあい、3hit1chipとなり、おかしな内容になります。
そこを直したいのですが、宜しくお願い致します。
質問者さんがおかしいと言ってる内容がおかしくないわけですが。
Re: どこが間違えているかがわかりません。
質問者さんはこの場合3hit0chipとさせたいのでしょうか?ISLe さんが書きました:そもそも、#chipがブローのことだとしてXTL さんが書きました:わからない点が、2)の1223という問題のときに、1233とやったばあい、3hit1chipとなり、おかしな内容になります。
そこを直したいのですが、宜しくお願い致します。
質問者さんがおかしいと言ってる内容がおかしくないわけですが。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: どこが間違えているかがわかりません。
>そもそも、
XTL さんが書きました:
わからない点が、2)の1223という問題のときに、1233とやったばあい、3hit1blowとなり、おかしな内容になります。
そこを直したいのですが、宜しくお願い致します。
#chipがブローのことだとして
質問者さんがおかしいと言ってる内容がおかしくないわけですが。
質問者さんはこの場合3hit0blowとさせたいのでしょうか?
そうです。3hit0blowとさせたいです。
1222の場合2211なら2hit1blowのように。
私が考えているのは、
int blow(int ans[4],int count[4]);
^不正な;
{
int i;
int j:
^恐らく;の誤り
int blow=0;
for(i=0;i<4;i++){
for(j=0;j<4;j++){
if(i ! = j&&ans==count){
blow++;
break;
}
}
}
return blow;
}
これのどれかが間違えているように思い、色々試したのですが、わからずじまいで
皆さんに相談しようと考えました。
XTL さんが書きました:
わからない点が、2)の1223という問題のときに、1233とやったばあい、3hit1blowとなり、おかしな内容になります。
そこを直したいのですが、宜しくお願い致します。
#chipがブローのことだとして
質問者さんがおかしいと言ってる内容がおかしくないわけですが。
質問者さんはこの場合3hit0blowとさせたいのでしょうか?
そうです。3hit0blowとさせたいです。
1222の場合2211なら2hit1blowのように。
私が考えているのは、
int blow(int ans[4],int count[4]);
^不正な;
{
int i;
int j:
^恐らく;の誤り
int blow=0;
for(i=0;i<4;i++){
for(j=0;j<4;j++){
if(i ! = j&&ans==count){
blow++;
break;
}
}
}
return blow;
}
これのどれかが間違えているように思い、色々試したのですが、わからずじまいで
皆さんに相談しようと考えました。
Re: どこが間違えているかがわかりません。
実行時に思った動きをしない、ということは、少なくともコンパイルはできていることになります。XTL さんが書きました: 2)の1223という問題のときに、1233とやったばあい、3hit1chipとなり、おかしな内容になります。
そこを直したいのですが、宜しくお願い致します。
その、コンパイルできているソースコードを(CODEタグ付きで)コピペしてください、というのが、
おそらく回答者一同の考えであります。
セミコロンがあるべきところに抜けているとか、インクリメントが全角になっているとかいうのは、
コンパイルできているソースコードではあり得ないことです。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: どこが間違えているかがわかりません。
Hit & Blowについて調べましたが、4つの数字の中で同じ数字を二度使ってはいけないというルールがあるみたいです。
(使うとhitとblowが同時発生しておかしくなる)
なので、1223とか1233という数字はそもそも使われません。
普通にHit & Blowを作るだけならこの問題は無視してもいいみたいですね。
(使うとhitとblowが同時発生しておかしくなる)
なので、1223とか1233という数字はそもそも使われません。
普通にHit & Blowを作るだけならこの問題は無視してもいいみたいですね。
Re: どこが間違えているかがわかりません。
なぜ、XLTさんは、みんながこれだけお手伝いしようとしているのに、まともなプログラムを添付しないのだろうか?
本当に、自分で作ったプログラムがあるのか、そう思うのは僕だけ?
本当に、自分で作ったプログラムがあるのか、そう思うのは僕だけ?
non
Re: どこが間違えているかがわかりません。
無視していいのではなく、じゅうぶんに意識しなくてはならないのではないでしょうか。白い時空 さんが書きました: 普通にHit & Blowを作るだけならこの問題は無視してもいいみたいですね。
特に、コンピューターが答えを作成するとき、同じ数字が出ないようにするロジックを組み込む、とか。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: どこが間違えているかがわかりません。
non様へ
自分で作ったソースコードを一番初めに書いたのですが、{、}などが適切でなかったですね。すいません。
皆様に感謝しています。
もう一度書きなおしましたので、宜しくお願い致します。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void)
{
int ans[4],count[4];
int hit(int ans[4],int count[4]);
int blow(int ans[4],int count[4]);
int hitblow(int ans[4],int count[4]);
int guess;
int hitresult;
int blowresult;
int hitblowresult;
int i;
char str[9];
srand( (unsigned)time( NULL ) );
ans[3]=rand()%10;
ans[2]=rand()%10;
ans[1]=rand()%10;
ans[0]=rand()%10;
printf("hit & blow");
for (i=0 ;i<10,i++)
{
printf("%D",i+1);
printf("回数");
fgets(str,sizeof(str),stdin);
guess=atoi(str);
count[0]=guess%10;
count[1]=(guess/10)%10;
count[2]=(guess/100)%10;
count[3]=(guess/1000)%10;
hitresult = hit(ans,count);
blowresult = blow(ans,count);
hitblowresult = hitblow(ans,count);
if(hitresult==4)
{
printf("正解");
break;
}else{
printf("%d",hit%blow.\n,hitresult,blowresult,hitblowresult);
}
}
printf(正解は%d%d%d%dです\n",ans[3],ans[2],ans[1],ans[0]),
}
int hit(int ans[4],int count[4])
{
int i;
int hit=0;
for(i=0;i<4;i++){
if(ans=count){
hit++;
}
}
return hit;
}
int blow(int ans[4],int count[4])
{
int i;
int j;
int blow=0;
for( i=0;i<4;i++){
for( j=0;j<4;j++){
if(i! = j&&ans==count){
blow++;
break;
}
}
}
return blow;
}
int hitblow(int ans[4],int count[4])
{
int hitblow=0;
int i;
int j;
for(i=0;i<4;i++){
if(ans==count){
for( j=0;j<4;j++){
if(i != j&&ans==count){
hitblow++;
break;
}
}
}
return hitblow;
}
自分で作ったソースコードを一番初めに書いたのですが、{、}などが適切でなかったですね。すいません。
皆様に感謝しています。
もう一度書きなおしましたので、宜しくお願い致します。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void)
{
int ans[4],count[4];
int hit(int ans[4],int count[4]);
int blow(int ans[4],int count[4]);
int hitblow(int ans[4],int count[4]);
int guess;
int hitresult;
int blowresult;
int hitblowresult;
int i;
char str[9];
srand( (unsigned)time( NULL ) );
ans[3]=rand()%10;
ans[2]=rand()%10;
ans[1]=rand()%10;
ans[0]=rand()%10;
printf("hit & blow");
for (i=0 ;i<10,i++)
{
printf("%D",i+1);
printf("回数");
fgets(str,sizeof(str),stdin);
guess=atoi(str);
count[0]=guess%10;
count[1]=(guess/10)%10;
count[2]=(guess/100)%10;
count[3]=(guess/1000)%10;
hitresult = hit(ans,count);
blowresult = blow(ans,count);
hitblowresult = hitblow(ans,count);
if(hitresult==4)
{
printf("正解");
break;
}else{
printf("%d",hit%blow.\n,hitresult,blowresult,hitblowresult);
}
}
printf(正解は%d%d%d%dです\n",ans[3],ans[2],ans[1],ans[0]),
}
int hit(int ans[4],int count[4])
{
int i;
int hit=0;
for(i=0;i<4;i++){
if(ans=count){
hit++;
}
}
return hit;
}
int blow(int ans[4],int count[4])
{
int i;
int j;
int blow=0;
for( i=0;i<4;i++){
for( j=0;j<4;j++){
if(i! = j&&ans==count){
blow++;
break;
}
}
}
return blow;
}
int hitblow(int ans[4],int count[4])
{
int hitblow=0;
int i;
int j;
for(i=0;i<4;i++){
if(ans==count){
for( j=0;j<4;j++){
if(i != j&&ans==count){
hitblow++;
break;
}
}
}
return hitblow;
}
Re: どこが間違えているかがわかりません。
それはおかしくないですか?xtl さんが書きました: 自分で作ったソースコードを一番初めに書いた
という文とともに、「コンパイルが通らない」ソースコードを載せられたのですよ。xtl さんが書きました: 2)の1223という問題のときに、1233とやったばあい、3hit1chipとなり、おかしな内容になります。
矛盾していませんか?
そして、最後に載せられたソースコードもコンパイルできないため、
この状況を再現できるソースコードがなかなか登場しないでいます。xtl さんが書きました: 2)の1223という問題のときに、1233とやったばあい、3hit1chipとなり、おかしな内容になります。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: どこが間違えているかがわかりません。
box様
私のソースコードがコピーが出来なく、手書きで書いたため、色々な間違いがあり、
皆様にご迷惑をかけ、申し訳ありませんでした。
実際に自分が作ったソースです。
N.M様
jでも試してみましたが、駄目でした・・
私のソースコードがコピーが出来なく、手書きで書いたため、色々な間違いがあり、
皆様にご迷惑をかけ、申し訳ありませんでした。
実際に自分が作ったソースです。
N.M様
jでも試してみましたが、駄目でした・・
Re: どこが間違えているかがわかりません。
コードタグを使ってほしいと最初の返信で書いてあるのですからコードタグを使うべきです。フォーラムルールは既読ですか?
どうしても使わないのであればその理由を書いてほしいです。書き間違い?から考えると携帯電話とかからなんでしょうか?
その辺のあなたの状況の説明がないといらぬ誤解を生むだけです。
printf("%d",hit%blow.\n,hitresult,blowresult,hitblowresult);
これはどんな文なんでしょうか?
どうしても使わないのであればその理由を書いてほしいです。書き間違い?から考えると携帯電話とかからなんでしょうか?
その辺のあなたの状況の説明がないといらぬ誤解を生むだけです。
printf("%d",hit%blow.\n,hitresult,blowresult,hitblowresult);
これはどんな文なんでしょうか?
Re: どこが間違えているかがわかりません。
hiddenさん
いらぬ誤解の意味がわからないのですが・・・
答えて頂ける方にお聞きしたいと考えています。
¥←これの半角が何故かできなく、半角した場合→\ になってしまいます。
いらぬ誤解の意味がわからないのですが・・・
答えて頂ける方にお聞きしたいと考えています。
¥←これの半角が何故かできなく、半角した場合→\ になってしまいます。
Re: どこが間違えているかがわかりません。
これがどういう状況を指しているのかよくわかりませんし、先の投稿にあったxtl さんが書きました: ¥←これの半角が何故かできなく、半角した場合→\ になってしまいます。
「ソースコードがコピーできない状態」というのも、何のことやらよくわかりません。
もし、「ソースコードがコピーできない状態」が本当に存在していて、なおかつ、
質問者さんが今抱えている問題を本当に解決したい、とお考えでしたら、
手間や時間がかかるかもしれませんが、お手元にあるソースコードを
「一字一句正確に」手で打って投稿していただく必要があると思います。
とにかく、問題が再現できるソースコードが見えないことには、話になりません。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: どこが間違えているかがわかりません。
ブラウザの表示上¥は\に見えますが、codeタグを使い投稿してしまえばちゃんと¥になります。
プレビューで確認してみてくださいね。
あと、なぜソースをコピペ出来ないのでしょうか?
コピペの方法がわからなければ聞いてください。
パソコン→スマートフォン等でも方法はあると思います。
プレビューで確認してみてくださいね。
あと、なぜソースをコピペ出来ないのでしょうか?
コピペの方法がわからなければ聞いてください。
パソコン→スマートフォン等でも方法はあると思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: どこが間違えているかがわかりません。
バックスラッシュとか円マークとか書かれた方が伝わりやすいような気がします。softya(ソフト屋) さんが書きました:ブラウザの表示上¥は\に見えますが、codeタグを使い投稿してしまえばちゃんと¥になります。
少なくとも私のところでは、表示上、
ブラウザの表示上円マークは円マークに見えますが、codeタグを使い投稿してしまえばちゃんと円マークになります。
という意味の文になってしまっていて、何のことやらよくわからなくなっています。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: どこが間違えているかがわかりません。
おっといらぬ誤解ってなんかちょっと変ですね。あらぬ誤解が普通でしょうか。まぁどうでもいいです。
xtlさんが質問に必要な情報を出さずにコンパイルも通らないコードばかりを出すので
無駄に遠回りをしているなぁと思って書いたのです。
ちなみに私は答えられない状況なだけで答える気がないわけではありませんので。
2)の1223という問題のときに、1233とやったばあい、3hit1chipとなり、おかしな内容になります。
おかしな内容になる ではなくどうなってほしいのかを書いたほうがいいと思います。
むしろマスターマインドの場合問題の時点でルール違反とも言えます。
もし1223という出題があり得るルールなのであればルールの説明をすべきです。
xtlさんが質問に必要な情報を出さずにコンパイルも通らないコードばかりを出すので
無駄に遠回りをしているなぁと思って書いたのです。
ちなみに私は答えられない状況なだけで答える気がないわけではありませんので。
2)の1223という問題のときに、1233とやったばあい、3hit1chipとなり、おかしな内容になります。
おかしな内容になる ではなくどうなってほしいのかを書いたほうがいいと思います。
むしろマスターマインドの場合問題の時点でルール違反とも言えます。
もし1223という出題があり得るルールなのであればルールの説明をすべきです。
Re: どこが間違えているかがわかりません。
codeの書き方はこれでいいのでしょうか??
blowの判定を直したいです。
どうか宜しくお願い致します。
blowの判定を直したいです。
どうか宜しくお願い致します。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
/* 概要 */
/* コンピュータが指定した値を当てるゲームの作成 */
/* コンピュータが出力した4桁の数値を当てる。 */
/* 解答回数は「10」回。10回入力し、正解しなければ、ゲームを終了する。 */
/* 入力された答えとコンピュータが出力した数値を判定し、 */
/* 同じ桁に同じ数値の場合:1Hit */
/* 違う桁に同じ数値の場合:1Blow */
/* とカウントし、「4Hit」になれば、終了。 */
/* 下記のような場合は、「1Hit」とする。 */
/* コンピュータ出力値:「1」「2」「1」「4] */
/* ユーザ入力値 :「1」「5」「6」「7] */
/* 「hit関数」「Blow関数」を作成する。 */
/* 各関数は、「入力された値」と「コンピュータが出力した値」を引数で渡し, */
/*「hit関数」は「hit数」を、「Blow関数」は「Blow数」を返す。 */
/*int=integer*/
int hit(int *answer,int *count);/*プロトタイプ宣言*/
int main(void)
{
int answer[4],count[4];
int blow(int *answer,int *count);
int guess; /* 4桁の数字 */
int hitresult; /* hitの回数 */
int blowresult; /* blowの回数 */
int i; /* 回数(制限) */
char str[9]; /* 数字が半角4文字+1 */
/* 正解の数字を4ケタランダム。それぞれ1桁指定 */
srand((unsigned int)time(NULL)); /* randの初期化 */
answer[3] = rand() % 10;
answer[2] = rand() % 10;
answer[1] = rand() % 10;
answer[0] = rand() % 10;
/* 始めの指示 */
printf("さあ始まりました HIT & BLOW!!!\n");
printf("プレイヤーさん、用意はいいかな?^^;\n");
printf("チャンスは10回!\n");
printf("4桁以外の数字を入れればゲームオーバだから気をつけてね!\n");
printf("ではCPUから勝利をもぎとるんだ!!\n\n");
/* 解答 */
printf("取得した値は%d%d%d%dです。\n", answer[3], answer[2], answer[1], answer[0]);//デバック用なので消してもよい
/* 範囲指定 */
for(i=0 ;i<10 ;i++)
{
printf("%d",i +1);
printf("回目の数を入力してね!");
fgets(str,sizeof(str),stdin);
guess = atoi(str);
count[0] = guess % 10; /* 4桁の数字を千・百・十・一と順番で反映させている */
count[1] = (guess / 10) % 10;
count[2] = (guess / 100) % 10;
count[3] = (guess / 1000) % 10;
hitresult=hit(answer,count);
blowresult=blow(answer,count);
if(hitresult==4)
{
printf("大正解、おめでとう!!!");
break;
}
else if((guess < 0)||(9999 < guess)) /* guessの値が0000~9999の範囲指定 */
{
printf("4桁の数字を入れ直さないとゲームオーバー\n");
break;
}else {
printf(" %d HIT %d BLOW.\n\n",hitresult,blowresult);
}
}
printf("正解は%d%d%d%dです\n",answer[3],answer[2],answer[1],answer[0]);
printf("ゲームを終了します!!\n\nお疲れ様でした!\n");
}
/* hit */
int hit(int *answer,int *count)
{
int i;
int hit=0;
for(i = 0 ; i < 4 ; i++){
if(answer[i]==count[i]){
hit++;
}
}
return hit;
}
/* blow */
int blow(int *answer,int *count)
{
int i;
int j;
int blow=0;
for(i = 0 ; i < 4 ; i++){
if(answer[i]==count[i]){
count[i] = 'a';
}
}
for(i = 0 ; i < 4 ; i++)
for(j = 0 ; j < 4 ; j++){
}
if(i=!j&&answer[i]==count[j]){
blow++;
break;
}
}
return blow;
}
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: どこが間違えているかがわかりません。
前にもお願いしましたが、必ずプレビューでcodeタグをうまく使えることを確認してください。今回は修正しておきました。
ところで今回も動かないプログラムなのですが、なぜコピー出来ないのか教えて頂けませんでしょうか?
ところで今回も動かないプログラムなのですが、なぜコピー出来ないのか教えて頂けませんでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: どこが間違えているかがわかりません。
とりあえずコンパイルが通るようにしてみました
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
/* 概要 */
/* コンピュータが指定した値を当てるゲームの作成 */
/* コンピュータが出力した4桁の数値を当てる。 */
/* 解答回数は「10」回。10回入力し、正解しなければ、ゲームを終了する。 */
/* 入力された答えとコンピュータが出力した数値を判定し、 */
/* 同じ桁に同じ数値の場合:1Hit */
/* 違う桁に同じ数値の場合:1Blow */
/* とカウントし、「4Hit」になれば、終了。 */
/* 下記のような場合は、「1Hit」とする。 */
/* コンピュータ出力値:「1」「2」「1」「4] */
/* ユーザ入力値 :「1」「5」「6」「7] */
/* 「hit関数」「Blow関数」を作成する。 */
/* 各関数は、「入力された値」と「コンピュータが出力した値」を引数で渡し, */
/*「hit関数」は「hit数」を、「Blow関数」は「Blow数」を返す。 */
/*int=integer*/
int hit(int *answer,int *count);/*プロトタイプ宣言*/
int main(void)
{
int answer[4],count[4];
int blow(int *answer,int *count);
int guess; /* 4桁の数字 */
int hitresult; /* hitの回数 */
int blowresult; /* blowの回数 */
int i; /* 回数(制限) */
char str[9]; /* 数字が半角4文字+1 */
/* 正解の数字を4ケタランダム。それぞれ1桁指定 */
srand((unsigned int)time(NULL)); /* randの初期化 */
answer[3] = rand() % 10;
answer[2] = rand() % 10;
answer[1] = rand() % 10;
answer[0] = rand() % 10;
/* 始めの指示 */
printf("さあ始まりました HIT & BLOW!!!\n");
printf("プレイヤーさん、用意はいいかな?^^;\n");
printf("チャンスは10回!\n");
printf("4桁以外の数字を入れればゲームオーバだから気をつけてね!\n");
printf("ではCPUから勝利をもぎとるんだ!!\n\n");
/* 解答 */
printf("取得した値は%d%d%d%dです。\n", answer[3], answer[2], answer[1], answer[0]);//デバック用なので消してもよい
/* 範囲指定 */
for(i=0 ;i<10 ;i++)
{
printf("%d",i +1);
printf("回目の数を入力してね!");
fgets(str,sizeof(str),stdin);
guess = atoi(str);
count[0] = guess % 10; /* 4桁の数字を千・百・十・一と順番で反映させている */
count[1] = (guess / 10) % 10;
count[2] = (guess / 100) % 10;
count[3] = (guess / 1000) % 10;
hitresult=hit(answer,count);
blowresult=blow(answer,count);
if(hitresult==4)
{
printf("大正解、おめでとう!!!");
break;
}
else if((guess < 0)||(9999 < guess)) /* guessの値が0000~9999の範囲指定 */
{
printf("4桁の数字を入れ直さないとゲームオーバー\n");
break;
}else {
printf(" %d HIT %d BLOW.\n\n",hitresult,blowresult);
}
}
printf("正解は%d%d%d%dです\n",answer[3],answer[2],answer[1],answer[0]);
printf("ゲームを終了します!!\n\nお疲れ様でした!\n");
}
/* hit */
int hit(int *answer,int *count)
{
int i;
int hit=0;
for(i = 0 ; i < 4 ; i++){
if(answer[i]==count[i]){
hit++;
}
}
return hit;
}
/* blow */
int blow(int *answer,int *count)
{
int i;
int j;
int blow=0;
for(i = 0 ; i < 4 ; i++){
if(answer[i]==count[i]){
count[i] = 'a';
}
}
for(i = 0 ; i < 4 ; i++){
for(j = 0 ; j < 4 ; j++){
if(i!=j&&answer[i]==count[j]){
blow++;
break;
}
}
}
return blow;
}
Re: どこが間違えているかがわかりません。
「blowのカウント値がおかしい」というだけではなかなか判断できないので、
具体的な実行結果を貼っていただけないでしょうか。
具体的な実行結果を貼っていただけないでしょうか。
Re: どこが間違えているかがわかりません。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: どこが間違えているかがわかりません。
前々からみなさんが仰っているように、あなたの頭の中は説明してもらわないとわかりませんって!
この実行結果はあなたの思っている通りですか?
取得した値は1122です。
1回目の数を入力してね!1222
3 HIT 0 BLOW.
2回目の数を入力してね!1223
2 HIT 1 BLOW.
3回目の数を入力してね!2211
0 HIT 4 BLOW.
4回目の数を入力してね!1111
2 HIT 0 BLOW.
5回目の数を入力してね!1122
大正解、おめでとう!!!正解は1122です
この実行結果はあなたの思っている通りですか?
取得した値は1122です。
1回目の数を入力してね!1222
3 HIT 0 BLOW.
2回目の数を入力してね!1223
2 HIT 1 BLOW.
3回目の数を入力してね!2211
0 HIT 4 BLOW.
4回目の数を入力してね!1111
2 HIT 0 BLOW.
5回目の数を入力してね!1122
大正解、おめでとう!!!正解は1122です
non
Re: どこが間違えているかがわかりません。
前々からみなさんが仰っているように、あなたの頭の中は説明してもらわないとわかりませんって!
この実行結果はあなたの思っている通りですか?
取得した値は1122です。
1回目の数を入力してね!1222
3 HIT 0 BLOW.
2回目の数を入力してね!1223
2 HIT 1 BLOW.
3回目の数を入力してね!2211
0 HIT 4 BLOW.
4回目の数を入力してね!1111
2 HIT 0 BLOW.
5回目の数を入力してね!1122
大正解、おめでとう!!!正解は1122です
上記の内容は問題ないのですが、
1223の時に1222とうつと、
3hit1blowになってしまいます。
本来であれば、3hit0blowとしたいのですが。。。
↑これが知りたいのです。
この実行結果はあなたの思っている通りですか?
取得した値は1122です。
1回目の数を入力してね!1222
3 HIT 0 BLOW.
2回目の数を入力してね!1223
2 HIT 1 BLOW.
3回目の数を入力してね!2211
0 HIT 4 BLOW.
4回目の数を入力してね!1111
2 HIT 0 BLOW.
5回目の数を入力してね!1122
大正解、おめでとう!!!正解は1122です
上記の内容は問題ないのですが、
1223の時に1222とうつと、
3hit1blowになってしまいます。
本来であれば、3hit0blowとしたいのですが。。。
↑これが知りたいのです。
Re: どこが間違えているかがわかりません。
>前々からみなさんが仰っているように、あなたの頭の中は説明してもらわないとわかりませんって!
この実行結果はあなたの思っている通りですか?
取得した値は1122です。
1回目の数を入力してね!1222
3 HIT 0 BLOW.
2回目の数を入力してね!1223
2 HIT 1 BLOW.
3回目の数を入力してね!2211
0 HIT 4 BLOW.
4回目の数を入力してね!1111
2 HIT 0 BLOW.
5回目の数を入力してね!1122
大正解、おめでとう!!!正解は1122です
上記の内容は問題ないのですが、
1223の時に1222とうつと、
3hit1blowになってしまいます。
本来であれば、3hit0blowとしたいのですが。。。
↑これが知りたいのです。
この実行結果はあなたの思っている通りですか?
取得した値は1122です。
1回目の数を入力してね!1222
3 HIT 0 BLOW.
2回目の数を入力してね!1223
2 HIT 1 BLOW.
3回目の数を入力してね!2211
0 HIT 4 BLOW.
4回目の数を入力してね!1111
2 HIT 0 BLOW.
5回目の数を入力してね!1122
大正解、おめでとう!!!正解は1122です
上記の内容は問題ないのですが、
1223の時に1222とうつと、
3hit1blowになってしまいます。
本来であれば、3hit0blowとしたいのですが。。。
↑これが知りたいのです。
Re: どこが間違えているかがわかりません。
その値に関しては、何度も書かれているから、みんなわかっているのですが、xtl さんが書きました: 1223の時に1222とうつと、
3hit1blowになってしまいます。
本来であれば、3hit0blowとしたいのですが。。。
↑これが知りたいのです。
なぜ、その値が3hit0blowなのかについて説明がないのです。
それで、私の独自の判断でhitした場所の数値は削除するのだろうという考えで
上記の例を挙げたわけです。あなたが、そのことを自分から説明するのをみんな
待っていたわけで、私も、最初のスレが出たときからプログラムは既にできていました。
さて、解答例ですが、上記例は、関数blowのチェック部分を下のように変えました。
non