カードを交換する

カードを交換する

change は、カードを交換する関数です。

捨てるカードを標準入力から受取り、代わりにカードの山から補充します。


/* カードを交換する */
void change(int player[M], int *stack, int *next) {
  int i;
  int nflag;  /* 真の flag の数 */
  int flag[M];/* カードの交換フラグ */

  /* 配列を初期化する */
  nflag = 0;
  for (i = 0; i < M; i++) flag[i] = 0;

  /* 交換するカードを決定する */
  while (1) {
    char str[2];/* 入力文字列 */

    printf("Please select the card(s) you want to change (1 - 5). ");
    printf("To finish, input 0.\n");
    str[0] = (char)getchar();/* getchar の戻り値は int */
    /* バッファの最後に移動(2 文字目以降や改行文字を無視) */
    fseek(stdin, 0, SEEK_END);/* rewind(stdin) は、コンパイラによっては先頭に戻る */

    if (('0' <= str[0]) && (str[0] <= '5')) {/* 文字コードで比較 */
      str[1] = '\0';
      i      = atoi(str);
      if        ((1 <= i) && (i <= 5)) {
        if (flag[i - 1]) continue;
        else             flag[i - 1] = 1;

        if (++nflag == N) break;
      } else if  (i == 0) {
        break;
      }
    } else {
      printf("Input Error!\n");
    }
  } 

  /* カードを交換する */
  for (i = 0; i < M; i++) if (flag[i]) player[i] = stack[++(*next)];;
}