前提・実現したいこと
コンピューターが生成した4桁の数字を当てるマスターマインドというプログラムを作ろうとしています.
例えば答えが2341の時
入力:7890 出力:それらの数字中0個の数字が含まれ、そのうち位置もあっているのは0個です
入力:1234 出力:それらの数字中4個の数字が含まれ、そのうち位置もあっているのは0個です
入力:2341 出力:正解です
というようなプログラムです。
発生している問題・エラーメッセージ
しかし、どのような数字を入力しても「それらの数字中0個が含まれ、・・・」というような結果になってしまいます・・・。どこが間違っているのか、どなたか教えてください(´;ω;`)
エラーメッセージ
該当のソースコード
ソースコード
#include<stdio.h>
#include<string.h>
#include<time.h>
#include<string.h>
#include<ctype.h>
void make4digits(char x[]) /相異なる4つの数字の並びを生成して配列xに格納/
{
int i,j,val;
srand(time(NULL)); for(i=0;i<4;i++){ do{ val=rand()%10; for(j=0;j<i;j++) if(val==x[j]-'0') break; }while(j<i); /*重複しない値が出るまで繰り返す*/ x[i]=val+'0'; }
}
int check(const char s[]) /入力された文字列が四文字、数字のみ、重複なしを満たすかチェック/
{
int i,j;
int len=strlen(s);
if(len!=4)
return 1;
for(i=0;i<4;i++){
if(!isdigit(s[i]))
return 2;
}
for(i=0;i<4;i++){
for(j=0;j<i;j++)
if(s[i]==s[j]) return 3;
}
return 0;
}
void judge(const char s[],char no[],int *hit,int *blow) /ヒットとフローの判定/
{
int i,j;
*hit=*blow=0;
for(i=0;i<4;i++){
for(j=0;j<4;j++){
if(s[i]==no[j]) /数字が一致/
if(i==j) *(hit)++; /位置も一致/
else *(blow)++; /位置は不一致/
}
}
}
void print_result(int snum,int spos) /判定結果を出力/
{
if(spos==4)
printf("正解です!\n");
else{
printf("それらの文字中%d個の数字が含まれます\n",spos+snum);
printf("そのうち位置もあっているのは%d個です\n",spos);
}
}
int main(void)
{
int try_no=0,i;
int chk;
int hit,blow,ch;
char no[4];
const char s[10];
clock_t end,start;
printf("マスターマインドをしましょう\n"); printf("4つの数字の並びを当ててください\n"); printf("1234のように連続して数字を入力してください\n"); printf("重複のないようにしてください\n"); printf("五回以内の正解を目指しましょう\n"); printf("スペースキーで開始します\n"); make4digits(no); printf("%s",no); /*正しくプログラムが動いてるか検証するために答えを表示*/ while((ch=getchar())!=' ') ; start=time(NULL); do{ do{ printf("入力してください:"); scanf("%s",s); chk=check(s); switch(chk){ /*正しく入力されるまでループ*/ case 1: printf("きちんと4文字入力してください\n"); break; case 2: printf("数字以外を入力しないでください\n"); break; case 3: printf("同じ数字を重複して入力しないでください\n"); break; } }while(chk!=0); try_no++; printf("%d回目\n",try_no); judge(s,no,&hit,&blow); print_result(blow,hit); }while(try_no<6 && hit!=4); end=time(NULL); if(hit!=4) printf("残念でした.正解は%sです\n",no); else printf("正解です!かかった時間は%f秒です\n",difftime(end,start)); return 0;
}
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答4件
あなたの回答
tips
プレビュー