私はいくつかのCプログラミングの質問を通じてつもりだと私は現在、ポインタ関連の質問にこだわって追加値 - ポインタと構造を持つ
Q:二次元の値を取る関数を書きますカードブラックジャックハンドを入力とし、ハンドのポイント合計を返します。カード '2'から '9'の値 は額面の値に等しく、カード 'T'、 'K'、 'Q'、 'J'は10ポイントの価値があり、エース( 'A')は別のエースが付いていない限り、11ポイントの価値がある 、その2番目のエースは1ポイントの価値があります。プログラムは誤った入力を捕らえることができるはずです。
例: カードを入力します:AQ スコアはカードを21
入力された:AA はスコアが12
である私は前にこの質問に取り組んできましたが、今回は私が使用する必要があるだろう私はまだかなり新しい方向へ向いています。カード値の取得とカードの計算は、1つの機能で行う必要があります。ここで私はこれまで持っているものです。
#include <stdio.h>
#define HAND 2
struct player_hand
{
char card1;
char card2;
};
void getHandValue(struct player_hand * hnd_ptr, char size, char size2)
{
int first_card;
int second_card;
//get cards from user
scanf("%c %c",&hnd_ptr->card1, &hnd_ptr->card2);
printf("Enter Cards: %c %c", &hnd_ptr->card1, &hnd_ptr->card2);
//check value of first card in hand
if(hnd_ptr->card1<='9' && hnd_ptr->card1>='2')
{
first_card=(int)hnd_ptr->card1 -48;
}
//check for special cards: king, queen, jack, ten
else if(hnd_ptr->card1=='T'||hnd_ptr->card1=='K'||hnd_ptr->card1=='Q'||hnd_ptr->card1=='J')
{
first_card=10;
}
//if first card is Ace
else if(hnd_ptr->card1=='A')
{
first_card=11;
}
else
{
//card not valid
printf("Not a valid card: %c",hnd_ptr->card1);
return;
}
//check value of 2nd card
if(hnd_ptr->card2<='9' && hnd_ptr->card2>='2')
{
second_card=(int)hnd_ptr->card2 -48;
}
//if 2nd card is a special kind
else if(hnd_ptr->card2=='T'||hnd_ptr->card2=='K'||hnd_ptr->card2=='Q'||hnd_ptr->card2=='J')
{
second_card=10;
}
//if 2nd card is Ace
else if(hnd_ptr->card2=='A')
{
if(hnd_ptr->card1=='A')
second_card=1;
else
second_card=11;
}
else
{
//if 2nd card not valid
printf("Not a valid card: %c",hnd_ptr->card2);
return;
}
add cards
printf("\nThe total card value is: %d",first_card+second_card);
}
//call function, test if works
//calling it wrong?
int main(void)
{
struct player_hand hnd [HAND] = { {'A', 'A'}};
getHandValue (hnd, HAND);
return;
}
あなたは今直面している問題は何ですか? –
ポインタを構造体に渡している場合、手の引数を取る必要はありません。ポインタを使用してアクセスできます。 –