【发布时间】:2017-04-02 06:27:16
【问题描述】:
我正在处理一些 c 编程问题,目前我遇到了一个与指针相关的问题
问:编写一个函数,将两张牌二十一点 HAND 的值作为输入,并返回该手牌的总点数。价值 牌'2'到'9'的牌面值相等,牌'T','K','Q','J'值10分,A牌('A')值11分 除非它带有另一个 A,否则第二个 A 值 1 分。该程序应该能够捕获错误的输入。
示例: 输入卡片:A Q 分数是21
输入卡片:A A 分数是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;
}
【问题讨论】:
-
你现在到底面临什么问题?
-
如果您将指针传递给结构,则无需为手做参数。您可以使用指针访问它们。
标签: c