工作在一個簡單的C編程問題,我有點卡住了。問:編寫一個函數,它將一張雙卡二十一點HAND的值作爲輸入,並返回手的點總數。牌'2'到'9'的值爲 等於它們的面值,牌'T','K','Q','J'值10分,而ace('A')是值得11分 除非它與另一個王牌,那麼第二個王牌是值得1分。該程序應該能夠捕捉到不正確的輸入。添加卡的價值 - C
實施例: 輸入卡:T 7 的分數是17
輸入卡:在一隻5 的分數是16
注:我用 'T' 的值爲10因此您只需傳入兩個字符即 而不是字符串作爲此函數的參數。
#define CASE_VALUE(str,val,card) case str: card = val;break;
int point_total(char card1,char card2){
int card1_v;
int card2_v;
switch(card1){
CASE_VALUE('2',2,card1_v);
CASE_VALUE('4',4,card1_v);
CASE_VALUE('5',5,card1_v);
CASE_VALUE('6',6,card1_v);
CASE_VALUE('7',7,card1_v);
CASE_VALUE('8',8,card1_v);
CASE_VALUE('9',9,card1_v);
CASE_VALUE('T',10,card1_v);
CASE_VALUE('K',10,card1_v);
CASE_VALUE('Q',10,card1_v);
CASE_VALUE('J',10,card1_v);
default:
return -1;
break;
}
switch(card2){
CASE_VALUE('2',2,card2_v);
CASE_VALUE('3',3,card2_v);
CASE_VALUE('4',4,card2_v);
CASE_VALUE('5',5,card2_v);
CASE_VALUE('6',6,card2_v);
CASE_VALUE('7',7,card2_v);
CASE_VALUE('8',8,card2_v);
CASE_VALUE('9',9,card2_v);
CASE_VALUE('T',10,card2_v);
CASE_VALUE('K',10,card2_v);
CASE_VALUE('Q',10,card2_v);
CASE_VALUE('J',10,card2_v);
default:
return -1;
break;
}
int value=card1_v+card2_v;
return value;
return -1;
}
// to test if it works
int main(void) {
char card1 = 10;
char card2 = 2;
printf("%i\n", point_total(card1, card2));
return 0;
}
現在它只返回-1,意味着手是無效的。我相信我可以忽略一些小事。我也不確定如何去實施A(ace)卡。想知道我是否在正確的軌道上,任何幫助將不勝感激!
你正在發送'10'和'2' ......那些與案例'T''和''2''不匹配。在主 –
中'char card1 ='T';'等'point_total'的用途是什麼?你有什麼要傳遞給它? – Olaf
Goddness,我怎麼能忽略這個... 2. Point_total是假設採取雙卡大酒杯的雙手作爲輸入的值,並返回手的點總數。 – supperforpupper