質問: 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
回答: 所謂Numer0n数当てゲームですね。 自分なりに作ってみました。参考になれば幸いです。 ``` #include #include #include #define BUFSIZE 256 int check(int*, int*); int main(void) { char buf[BUFSIZE]; int c1[4],c2[4]; int val; int i,j; int n,loop; int flag; srand((unsigned int)time(NULL)); c1[0] = (char)(rand() % 10); i = 0; while(i < 4){ flag = 1; val = rand() % 10; for(j = 0; j < i; j++){ if(val == c1[j]){ flag = 0; break; } } if(flag == 1){ c1[i] = val; i++; } } printf("4桁の数字が決定しました。\n"); flag = 0; loop = 0; while(flag == 0){ fgets(buf,sizeof(buf),stdin); n = strtol(buf,NULL,10); for(i = 0; i < 4; i++){ c2[3 - i] = n % 10; n /= 10; } flag = check(c1,c2); loop++; } printf("%d回で正解できました。\n",loop); return 0; } int check(int* c1, int* c2) { int i,j; int hit = 0; int blow = 0; int flag = 0; for(i = 0; i < 4; i++){ if(c1[i] == c2[i]){ hit++; } else{ for(j = 0; j < 4; j++){ if(c1[i] == c2[j]){ blow++; } } } } printf("hit = %d, blow = %d\n",hit,blow); if(hit == 4){ flag = 1; } return flag; } ```