簡體   English   中英

C ++類型為char的輸入,類型為int的輸出

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM