我會通過一些C編程的問題,我目前停留在一個指針相關的問題增加價值 - 用指針和結構
問:編寫一個函數,需要一個雙值卡二十一點HAND作爲輸入,並返回手的積分。牌'2'到'9'的值爲 等於它們的面值,牌'T','K','Q','J'值10分,而ace('A')是值得11分 除非它與另一個王牌,那麼第二個王牌是值得1分。該程序應該能夠捕捉到不正確的輸入。
例子: 輸入卡:AQ 得分爲21
輸入卡:AA 得分爲12
我以前解決這個問題,但這次我不得不使用我仍然相當新的指針。獲取卡片值和計算卡片必須在一個功能中完成。這是我到目前爲止有:
#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;
}
你現在面對的是什麼問題? –
如果您將指針傳遞給結構,則無需爲手指定參數。您可以使用指針訪問它們。 –