在编写以下函数之前,我所做的是将数字1到52分配给一副52张牌(在4行13列的2d阵列中).now我希望以一种在一行中有2个显示器的方式打印包含数字的牌(按升序排列)...
void DeckOfCards::deal()
{
// initialize suit array
static const char *suit[ 4 ] =
{ "Hearts", "Diamonds", "Clubs", "Spades" };
// initialize face array
static const char *face[ 13 ] =
{ "Ace", "Deuce", "Three", "Four", "Five", "Six", "Seven",
"Eight", "Nine", "Ten", "Jack", "Queen", "King" };
// for each of the 52 cards
for ( int card = 1; card <= 52; card++ )
{
// loop through rows of deck
for ( int row = 0; row <= 3; row++ )
{
// loop through columns of deck for current row
for ( int column = 0; column <= 12; column++ )
{
// if slot contains current card, display card
if ( deck[ row ][ column ] == card )
{
cout << setw( 5 ) << right << face[ column ]
<< " of " << setw( 8 ) << left << suit[ row ]
<< ( card % 2 == 0 ? '\n' : '\t' );
} // end if
} // end innermost for
} // end inner for
} // end outer for
} // end function deal 但是,如果我更改for statemants的顺序,即先是行,然后是列,然后是card...what,那么我得到的是一个完全不同的输出布局……在一个line....it中没有两个输出是完全disordered...why的,请告诉我?
发布于 2011-03-07 23:05:30
卡片循环可能不是必需的。取而代之的是,在内部循环中,从行和列计算card。
改变行和列循环的顺序预计会改变输出(行主要或列主要)
发布于 2011-03-07 23:19:25
如果你先划,再列,再打牌,你会先得到所有的红心,然后是所有的方块,梅花和黑桃,然后依次是A,Deuce,3.国王
它是否放入一个额外的列取决于“卡片”,这是它在包中的随机位置,所以无论它是否会给你换行符,这几乎就像抛硬币一样,除了你保证它会准确地这样做26次。
https://stackoverflow.com/questions/5221134
复制相似问题