Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 有关二维扑克牌阵列C++;_C++_Arrays - Fatal编程技术网

C++ 有关二维扑克牌阵列C++;

C++ 有关二维扑克牌阵列C++;,c++,arrays,C++,Arrays,所以我在请求帮助一次之后,又继续我的计划,这就是我现在所拥有的 #include "stdafx.h" #include <iostream> #include <string> #include <ctime> #include <iomanip> using namespace std; void main() { const int ROWS = 4; string suits[ROWS] = { "Diamonds", "Cl

所以我在请求帮助一次之后,又继续我的计划,这就是我现在所拥有的

#include "stdafx.h"
#include <iostream>
#include <string>
#include <ctime>
#include <iomanip>

using namespace std;

void main()
{
const int ROWS = 4;
string suits[ROWS] = 
{
    "Diamonds", "Clubs", "Hearts", "Spades"
};

const int COLS = 13;
string faces[COLS] = 
{
        "Ace", "Deuce", "Three", "Four", "Five", "Six",
    "Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King"
};

int deck[ROWS][COLS] =
{
    {1,2,3,4,5,6,7,8,9,10,11,12,13},
    {14,15,16,17,18,19,20,21,22,23,24,25,26},
    {27,28,29,30,31,32,33,34,35,36,37,38,39},
    {40,41,42,43,44,45,46,47,48,49,50,51,52}
};

for(int iii = 0; iii < ROWS; iii++)
{
    for(int jjj = 0; jjj < COLS; jjj++)
    {

        cout << deck[iii][jjj] << " " << faces[jjj] << " of " << suits[iii] << endl;
    }
}

srand((unsigned) time(0));

for(int c = 0; c < ROWS; c++)
{
    for(int d = 0; d < COLS; d++)
    {
        int face = rand() % 13;
        int suit = rand() % 4;

        cout << left << setw(5) << " " << faces[face] << " of " << suits[suit] << endl;
        int e = deck[suit][face];
        deck[suit][face] = deck[c][d];
        deck[c][d] = e;
        cout << deck[c][d];





    }
}
等等。但是,第二个循环应该重新洗牌并打印牌组:

 Nine of Clubs
22     King of Hearts
39     Queen of Spades
51     Seven of Spades
46     Ace of Spades
40     Six of Spades
45     Three of Spades
42     Seven of Hearts
33     Four of Diamonds
46     Five of Diamonds
40     Seven of Diamonds
42     Queen of Clubs
25     Five of Clubs
18     Four of Hearts
30     Ace of Clubs
30     Three of Clubs
16     Jack of Clubs
24     Deuce of Spades
41     Eight of Diamonds
33     Queen of Spades
3     Seven of Hearts
8     Jack of Hearts
37     Eight of Diamonds
19     Four of Clubs
24     Queen of Hearts
38     Three of Hearts
29     Nine of Clubs
37     Ace of Diamonds
22     Ace of Hearts
37     Queen of Diamonds
25     Four of Diamonds
9     Four of Diamonds
31     Three of Hearts
37     Nine of Clubs
27     Nine of Clubs
34     Ten of Hearts
36     Five of Hearts
9     Jack of Clubs
24     Five of Spades
44     Seven of Clubs
3     Six of Hearts
31     Jack of Spades
50     Ten of Diamonds
40     Six of Clubs
33     Eight of Diamonds
23     Ten of Hearts
36     Ace of Hearts
26     Six of Spades
23     Nine of Clubs
35     Seven of Clubs
5     Five of Hearts
1     Five of Diamonds
10Press any key to continue . . .
问题1:2D数组的所有数字都与1D数组的字符串不正确对应。举个例子,九个球杆在22号球杆的旁边,这是正确的,数字是正确的,直到你到达1号球杆,这是在三个球杆的旁边,这是不正确的,从那里一切都搞砸了

问题2:数字和字符串没有完全对齐,字符串首先开始打印,因此字符串的数字向下一个,然后超过一个


问题3:有些数字和字符串重复,我不想重复。如何确保它们不会重复。

出现问题的第一个原因是打印输出循环中断。由于您正在使用
iii
jjj
索引
deck[][][]
faces[]
/
suites[]
对,因此只有当牌都按顺序排列时,它才会正常工作,就像洗牌之前一样

也就是说,如果你想一想,当你洗牌的时候,把牌组保持为二维数组就变得毫无意义了。只需将其保持为一个由52张卡组成的一维数组。不管怎样,从
0
51
进行编号,从长远来看,这将为您节省大量的痛苦和痛苦

要将卡号转换回人脸和套装,您需要从
deck
数组中读取卡号,计算
x/13
以获得到
suit[]
数组中的索引,以及
x%13
以获得到
faces[]
数组中的索引

最后但并非最不重要的是,你的洗牌不是很完美。实际上,对于一个测试程序来说,这是可以的,但是如果你想认真对待的话,你应该修改它以使用Fisher-Yates算法。乍一看,它看起来一模一样,但对随机数生成器参数的修改会产生不同


还要避开提供的库
rand()
,它通常很糟糕。我之所以使用xor shift RNG,是因为它很好,足以用于Monte Carlo,而且速度非常快。

尝试将问题分解为更小的部分或步骤,然后运行/调试它们,看看结果如何。尝试在循环中的每个步骤中放置cout语句(或使用断点进行调试),并打印(或在调试器中查看)所涉及的不同变量。一步一步地去试着确定哪里出了问题。不要害怕将循环的执行步骤写在纸上。有时这样做之后,错误会变得非常明显


如何调试是所有程序员必须学习的关键技能。如果您无法很好地调试代码,那么随着程序变得更加复杂,这些问题只会变得更糟,甚至更难解决。

至于对齐问题,请检查。关于第一个问题注意,C++中的索引开始于<代码> 0 <代码>,而不是<代码> 1 <代码>!你应该有
{0,1,2,3,4,5,6,7,8,9,10,11,12}
作为你的第一组aso。“更多帮助”不是问题。而且帖子中提到的问题太广泛(更不用说它不止一个问题)。请每次关注一个特定的问题。它不仅能帮你找到问题的答案,甚至能帮你自己解决问题。使用调试器总是比使用StackOverflow查找问题更有效率。
 Nine of Clubs
22     King of Hearts
39     Queen of Spades
51     Seven of Spades
46     Ace of Spades
40     Six of Spades
45     Three of Spades
42     Seven of Hearts
33     Four of Diamonds
46     Five of Diamonds
40     Seven of Diamonds
42     Queen of Clubs
25     Five of Clubs
18     Four of Hearts
30     Ace of Clubs
30     Three of Clubs
16     Jack of Clubs
24     Deuce of Spades
41     Eight of Diamonds
33     Queen of Spades
3     Seven of Hearts
8     Jack of Hearts
37     Eight of Diamonds
19     Four of Clubs
24     Queen of Hearts
38     Three of Hearts
29     Nine of Clubs
37     Ace of Diamonds
22     Ace of Hearts
37     Queen of Diamonds
25     Four of Diamonds
9     Four of Diamonds
31     Three of Hearts
37     Nine of Clubs
27     Nine of Clubs
34     Ten of Hearts
36     Five of Hearts
9     Jack of Clubs
24     Five of Spades
44     Seven of Clubs
3     Six of Hearts
31     Jack of Spades
50     Ten of Diamonds
40     Six of Clubs
33     Eight of Diamonds
23     Ten of Hearts
36     Ace of Hearts
26     Six of Spades
23     Nine of Clubs
35     Seven of Clubs
5     Five of Hearts
1     Five of Diamonds
10Press any key to continue . . .