[英]convert type int(C::*)(int, char) to type int(int, char)
[英]C++ input of type char, output of type int
我正在上我的第一個C ++類,但遇到了麻煩。 我非常感謝您有經驗的程序員的幫助。
作業正在創建二十一點計分程序。 不是很現實,但是嘿。 用戶輸入他想要多少張卡,然后輸入每張卡的值。 分配指定輸入應為char類型。 因此,如果用戶擁有2卡,則輸入2,但該2實際上是char ,必須將其轉換為int 。 否則,如果他們有一個女王/王后,他們將輸入“ Q”,而我的程序應該將該Q轉換為10分才能得分。 我不知道什么是正確的方法。 作業表明我將使用switch語句或嵌套的if-else語句,但是恐怕我從本書示例中不太了解switch 。
因此,這只是我嘗試切換的一小部分。 * points_for_card *的類型為char ,* number_value *的類型為int。
switch (points_for_card)
{
case '2':
number_value = 2 ;
break;
case '3':
number_value = 3 ;
break;
// ETC
}
因此,我要講的是:如果用戶將3作為字符輸入,它將變成int3。但這也許根本不是switch起作用的方式。
問題是,我的程序可以編譯並運行,但是返回的是怪異的瘋狂巨大數字。 如果我將points_for_card
移到int
而不是char
,那么該算術對於輸入的任何數字都非常有效,因為在那一點上,它們只是將它們加在一起。
我希望我可以對此進行解釋,如有必要,將盡可能地澄清。
可能是這樣的代碼:
if (points_for_card >= '1' && points_for_card <= '9'){
number_value = points_for_card - '0'; // convert to number
}else if (points_for_card == 'Q'){
...
}
我想到了一張地圖 。 您可以直接存儲分數,也可以制作一張地圖以查找卡類型,而制作其他地圖以將其他信息(例如分數)與每張卡相關聯。 這是嬰兒的例子:
std::map<char, int> scores;
scores['Q'] = 10; scores['A'] = 13; scores['2'] = 2; // etc.
char c;
std::cout << "Please enter a card: ";
std::cin >> c;
std::cout << "Your card has score " << scores[c] << std::endl;
通常,當您的心臟說“切換”時,您的大腦應該說“地圖” :-)
我個人定義一個enum ECardType { Card_2, ..., Card_10, Card_Jack, ... };
並將一張地圖設為std::map<char, ECardType>
,然后將另一張地圖從卡類型映射到諸如得分之類的次要信息。
您如何將輸入輸入points_for_card
?
您的輸入應為cin >> points_for_card
;
除了將字符與字符進行比較之外,還可以將其與字符的ASCII值進行比較。 例如,
char letter = 'A'
if(letter == 65){
cout << "Match";
}
上面的代碼將輸出“ Match!”。
另外,您的switch語句用詞很完美。 問題出在程序的其他地方,因此請提供相關來源。 另一點與您的程序有關,但與您的問題無關:您如何處理Aces? 您知道他們可以算為1或11,具體取決於玩家的手牌值,對吧?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.