C言語関係掲示板

過去ログ

No.119.配列にトランプ13種を指定


No.683

[訂正]配列にトランプ13種を指定
投稿者---美香(2001/12/10 00:02:32)


あまりにも初歩的な質問でしたら申し訳ないのですが、ご指導をお願いいたします!
main関数内に、配列でトランプの13枚を指定したいのですが、上手く実行できません。
main関数の外にポインタで指定すると一応は実行出来るのですが、main関数内にトランプの配列を指定するにはどうしたら良いのでしょうか?

main()
{
 /*カード13種*/
 char card[]={'A','2','3','4','5','6','7','8','9','10','J','Q','K'};
}

↑現在、main関数内の配列は上記のようにしてあります。
どう書き直したら良いのでしょうか?
宜しくお願いします!

※先程、一度書き込みをしましたが、構文に書き間違いが有りましたので訂正いたしました。


No.684

Re:[訂正]配列にトランプ13種を指定
投稿者---shu(2001/12/10 02:09:33)
http://c2c-1.rocketbeach.com/~finder_s/ccc/


>あまりにも初歩的な質問でしたら申し訳ないのですが、ご指導をお願いいたします!
>main関数内に、配列でトランプの13枚を指定したいのですが、上手く実行できません。
>main関数の外にポインタで指定すると一応は実行出来るのですが、main関数内にトランプの配列を指定するにはどうしたら良いのでしょうか?
>
>main()
>{
> /*カード13種*/
> char card[]={'A','2','3','4','5','6','7','8','9','10','J','Q','K'};
>}

簡単そうにみえて意外と難しい問題ですね。
上記のホームページの card.c ファイルを見てみてください。
(3パターンほど用意してみました。)

・・・'10' は文字としてつかえませんね。

No.686

Re:[訂正]配列にトランプ13種を指定
投稿者---B.Smith(2001/12/10 13:07:13)


少しだけ補足したいと思います。shuさんの方法で解決できますので、以下の内容は参考程度に見てください。

'10'

C言語をよく理解していても、ちょっとうっかりすると、このような記述をしてしまうことがあります。例えば、「文字列の配列」を「文字の配列」に置き換えた場合等…
単純な問題ほど解決が難しい場合があります。今回のような場合には、配列内のデータの扱い方を再検討しなければなりません。

例1
    char    card[]={
        'A','2','3','4','5','6','7','8','9','0','J','Q','K'
    };

配列の内容を表示以外に使いたい場合、例えばカードの種類を、配列の内容で判断したい場合等は、やはり例1のようにすべて「文字」で初期化するべきでしょう。10の部分を'0'としています。
参照したいカードを指すインデックスをIdxとした場合、表示に使用する時は、
    printf("%c%c",
        ((card[Idx] == '0')? '1' : ' '),
        card[Idx]);

これは、特別な場合の処理を追加する方法です。条件式により、10の場合だけ特別に'1'を前に表示します。「プログラムをある程度作成してしまったので、今更データ構造を変えたくない」、といった場合は、このように特別な場合の処理を追加することで問題を回避できます。
ただし、「追加した処理は、特別な場合にのみ使用されるものだが、条件比較は毎回実行されている」ということを忘れないでください。

例2
    char    *card[] = {
        "A","2","3","4","5","6","7","8","9","10","J","Q","K"
    };

例2は、「配列の内容は表示用としてしか扱わない」、といった場合の例です。カードの種類を文字列として扱います。
この場合の配列へのアクセス方法は、
    printf("%2s",card[Idx]);

すべてのカード種類は同じ配列要素(ポインタ)なので、特別な場合の処理を入れる必要がありません。扱いやすさ、という点では例2の方が良いです。
ただし、配列の要素は「文字」ではなく「文字列」(ポインタ)であることに注意してください。すでに、配列を文字として扱うようにプログラムを作成している場合には、配列を扱っている部分をすべて再作成しなければならない可能性があります。




No.692

Re:[訂正]配列にトランプ13種を指定
投稿者---美香(2001/12/11 00:10:12)


shuさん、B.Smithさん、アドバイス有り難う御座います。
早速やってみます!
本当に有り難う御座いました!!

戻る


「初心者のためのポイント学習C言語」 Last modified:2002.01.11
Copyright(c) 2000-2002 TOMOJI All Rights Reserved