类型为char的C ++输入,类型为int的输出

时间:2011-09-05 02:43:56

标签: c++ switch-statement

我正在参加我的第一个C ++课程而且我被困住了。我非常感谢有经验的程序员提供的一些帮助。

该任务正在创建一个二十一点评分程序。不是很现实,但嘿。用户输入他想要的牌数,然后输入每张牌的价值。赋值指定输入应为 char 类型。因此,如果用户有2张卡,则输入2,但该2实际上是 char ,必须转换为 int 。或者如果他们有女王,他们会输入“Q”,我的程序应该将该Q转换为10分进行评分。我无法弄清楚这是做正确的方法。作业建议我将使用开关语句或嵌套 if-else 语句,但恐怕我不理解切换从书中的例子。

所以这里是我尝试切换的一小部分。 * 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'作为字符,它就变成了int 3.但也许这不是交换机的工作方式。

问题是,我的程序编译并运行,但返回奇怪的疯狂巨大数字。如果我将points_for_card移动到int而不是char,那么对于我输入的任何数字,算法都能正常工作,因为此时它只是将它们加在一起。

我希望我解释一下,如果有必要,我会尽可能地澄清。

3 个答案:

答案 0 :(得分:3)

它可以是这样的代码:

if (points_for_card >= '1' && points_for_card <= '9'){
    number_value = points_for_card - '0'; // convert to number
}else if (points_for_card == 'Q'){
    ...
}

答案 1 :(得分:0)

想到地图。您可以直接存储分数,也可以制作一张地图以查找卡片类型和其他地图,以便将其他信息(如分数)与每张卡片相关联。这是婴儿的例子:

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>,然后将其他地图从卡片类型转换为辅助信息,例如分数。

答案 2 :(得分:0)

您如何接受points_for_card的输入?

您的输入应为cin >> points_for_card;

您可以将字符与字符的ASCII值进行比较,而不是将字符与字符进行比较。 例如,

char letter = 'A'
if(letter == 65){
cout << "Match";
}

上面的代码将输出“Match!”。

此外,您的switch语句完全符合措辞。问题出在您的计划的其他地方,所以请提供相关的来源。 另一点与您的计划有关但不是您的问题:您如何处理Aces?你知道他们可以算作1或11,这取决于玩家的手牌值,对吗?