C ++ ввод типа char, вывод типа int - PullRequest
1 голос
/ 05 сентября 2011

Я беру свой самый первый класс C ++, и я застрял.Я был бы очень признателен за помощь от вас, опытных программистов.

Задача - создать программу для игры в блэкджек.Не очень реалистичный, но эй.Пользователь вводит, сколько карт он хочет, а затем значения каждой из этих карт.Назначение указывает, что входные данные должны иметь тип char .Поэтому, если у пользователя есть 2 карты, они вводят 2, но эта 2 на самом деле символ и должна быть преобразована в int .Или они вводят «Q», если у них есть ферзь, и моя программа должна конвертировать это Q в десять баллов для оценки.Я не могу понять, как правильно сделать это.Назначение предполагает, что я буду использовать либо оператор 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'как символ, он становится int 3. Но, возможно, это не то, как переключатель работает вообще.

Дело в том, что моя программа компилируется и работает, но возвращает странные сумасшедшие огромные числа.Если я переместу points_for_card в int вместо char, то арифметика отлично работает для любых чисел, которые я ввожу, потому что в этот момент они просто складывают их вместе.

Надеюсь, я все объяснил нормально, уточню как можно больше.

Ответы [ 3 ]

3 голосов
/ 05 сентября 2011

это может быть что-то вроде этого кода:

if (points_for_card >= '1' && points_for_card <= '9'){
    number_value = points_for_card - '0'; // convert to number
}else if (points_for_card == 'Q'){
    ...
}
0 голосов
/ 05 сентября 2011

Как вы берете входные данные в points_for_card?

Ваш ввод должен быть cin >> points_for_card;

Вместо сравнения символа с символом, вы также можете сравнить его с ASCIIценность персонажа.Например,

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

Приведенный выше код выведет «Match!».

Кроме того, ваши операторы switch отлично сформулированы.Проблема в другом месте вашей программы, поэтому, пожалуйста, предоставьте соответствующий источник.Еще один момент, связанный с вашей программой, но не с вашей проблемой: как вы справляетесь с тузами?Вы знаете, что их можно считать 1 или 11, в зависимости от значения руки игрока, верно?

0 голосов
/ 05 сентября 2011

A карта приходит на ум. Вы можете сохранить результаты напрямую или создать одну карту для поиска типа карты и другие карты, чтобы связать другую информацию (например, оценку) с каждой картой. Вот пример с ребенком:

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>, а затем другие карты от типа карты до вторичной информации, такой как оценки.

...