инициализация структур с использованием информации, вводимой пользователем - PullRequest
3 голосов
/ 26 апреля 2010

Я пытаюсь создать программу, которая работает с покерными руками (техасский холдем); каждая рука имеет значение от 1 до 169, и я хочу иметь возможность вводить каждую карту и определять, подходят ли они или нет, и чтобы эти значения соответствовали серии структур. Вот код до сих пор, я не могу заставить его работать (я начинающий программист). о, и я использую Visual Studio 2005 кстати

#include "stdafx.h"
#include <iostream>


int main()
{
    using namespace std;


    struct FirstCard
    {
        struct SecondCard
        {

            int s;  //suited
            int n;  //non-suited

        };

        SecondCard s14;
        SecondCard s13;
        SecondCard s12;
        SecondCard s11;
        SecondCard s10;
        SecondCard s9;
        SecondCard s8;
        SecondCard s7;
        SecondCard s6;
        SecondCard s5;
        SecondCard s4;
        SecondCard s3;
        SecondCard s2;


    };

    FirstCard s14; //ace
    FirstCard s13; //king
    FirstCard s12; //queen
    FirstCard s11; //jack
    FirstCard s10;
    FirstCard s9;
    FirstCard s8;
    FirstCard s7;
    FirstCard s6;
    FirstCard s5;
    FirstCard s4;
    FirstCard s3;
    FirstCard s2;


    s14.s14.n = 169; // these are the values that each combination
    s13.s13.n = 168; // will evaluate to, would eventually have 
    s12.s12.n = 167; // hand combinations all the way down to 1
    s11.s11.n = 166;
    s14.s13.s = 165;
    s14.s13.s = 164;
    s10.s10.n = 163; //10, 10, nonsuited
    s14.s13.n = 162;
    s14.s11.s = 161;
    s13.s12.s = 160;// king, queen, suited
    s9.s9.n = 159;
    s14.s10.s = 158;
    s14.s12.n = 157;
    s13.s11.s = 156;
    s8.s8.n = 155;
    s12.s11.s = 154;
    s13.s10.s = 153;
    s14.s9.s = 152;
    s14.s11.n = 151;

    cout << "enter first card: " << endl;

    cin >> somthing?//no idea what to put here, but this would somehow
            //read out the user input (a number from 2 to 14)
            //and assign it to the corresponding struct

    cout << firstcard.secondcard.suited_or_not << endl; //this would change depending
                                                            //on what the user inputs
    system("Pause");

} 

1 Ответ

2 голосов
/ 26 апреля 2010

Прежде всего, вместо того, чтобы изучать все методом проб и ошибок, подумайте о прочтении хорошей вводной книги ( список здесь ). Каждая книга, которую стоит прочитать, посвящена базовому вводу в C ++ и тому, как обрабатывать повторяющийся код, например, используя контейнеры.

Как говорится: я ничего не знаю о покере, но вам определенно нужно прочитать о контейнерах - если вы неоднократно определяете переменные, должен быть какой-то способ абстрагировать его.

Исходя из того, что у вас есть, допустим, мы сгруппировали значения в одну структуру:

struct Values {
    unsigned suited;
    unsigned unsuited;
    Values() : suited(0), unsuited(0) {} // some default
};

Тогда мы можем использовать контейнеры, которые позволяют нам обращаться к ним по их номеру:

typedef std::map<unsigned, Values> SecondCardMap;
typedef std::map<unsigned, SecondCardMap> CardMap;

С этим мы можем удобно вставлять и изменять структуры по их номерам:

CardMap cards;
cards[14][14].unsuited = 169;
cards[13][13].unsuited = 168;

Теперь вам нужно только прочитать индексы от пользователя:

unsigned first, second;
std::cout << "enter first: ";
std::cin >> first;
std::cout << "enter second: ";
std::cin >> second;

И может получить доступ к значениям в соответствии с этим:

cards[first][second].unsuited = 1234;

Обратите внимание, что приведенное выше не касается обработки ошибок и т. Д.

...