简体   繁体   English

使用用户输入信息初始化结构

[英]initializing structs using user-input information

I am trying to make a program that works with poker (texas holdem) starting hands; 我正在尝试制作一个与扑克(德州扑克)起手的程序; each hand has a value from 1 to 169, and i want to be able to input each card and whether they are suited or not, and have those values correspond to a series of structs. 每只手的值从1到169,我希望能够输入每张卡以及它们是否适合,并且这些值对应于一系列结构。 Here is the code so far, i cant seem to get it to work (im a beginning programmer). 这是到目前为止的代码,我似乎无法让它工作(我是一个初级程序员)。 oh and im using visual studio 2005 by the way 哦,我顺便使用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");

} 

First off, instead of learning all by trial and error, consider reading a good introductory book ( list here ). 首先,不要通过反复试验来学习所有内容,而应考虑阅读一本好的入门书( 此处列表 )。 Every book worth reading address basic input in C++ and how to handle repetitive code by eg using containers. 每本值得阅读的书都解决了C ++中的基本输入以及如何使用容器来处理重复代码。

That being said: I don't know anything about poker, but you definitely need to read about containers - if you repeatedly define variables, there has to be some way to abstract it. 话虽如此:我对扑克一无所知,但你肯定需要阅读有关容器的内容 - 如果你反复定义变量,必须有一些方法来抽象它。

Going from what you have, lets say we group the values in one struct: 从你拥有的东西开始,我们可以说我们将值组合在一个结构中:

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

Then we can use containers that allows us to access them by their number: 然后我们可以使用允许我们通过其编号访问它们的容器:

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

With that we can insert and modify the structs conveniently via their numbers: 有了它,我们可以通过它们的数字方便地插入和修改结构:

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

Now you'd only have to read in indices from the user: 现在你只需要阅读用户的索引:

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

And could access the values according to that: 并且可以根据以下内容访问值:

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

Note that the above doesn't address any error handling etc. 请注意,上述内容并未解决任何错误处理等问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM