注册 登录
编程论坛 C++教室

洗牌,发牌程序编译没错,为什么结果出不来?

GeneralJing 发布于 2011-10-13 21:05, 788 次点击
写了个洗牌和发牌的程序,程序编译正确,但运行后却没有任何结果,希望大家给看看问题出现在哪里?
头文件:DeckOfCards.h
class DeckOfCards
{
public:
    DeckOfCards();
    void shuffle();
    void deal();
private:
    int deck[ 4][ 1 ];
};
函数声明 DeckOfCards1.cpp
#include <iostream>
using std::cout;
using std::left;
using std::right;

#include <iomanip>
using std::setw;

#include <cstdlib>
using std::rand;
using std::srand;

#include <ctime>
using std::time;

#include "DeckOfCards.h"

DeckOfCards::DeckOfCards()
{
    for ( int row = 0; row <= 3; row++ )
    {
        for ( int column = 0; column <= 12; column++ )
        {
            deck[ row ][ column ] = 0;
        }
    }

    srand( time( 0 ) );
}

void DeckOfCards::shuffle()
{
    int row;
    int column;

    for ( int card = 1; card <= 52; card++ )
    {
        do
        {
            row = rand() % 4;
            column = rand() % 13;
        } while( deck[ row ][ column ] != 0 );

        deck[ row ][ column ] = card;
    }
}

void DeckOfCards::deal()
{
    static const char *suit[ 4 ] =
    { "Hearts", "Diamonds", "Clubs", "Spades" };

    static const char *face[ 13 ] =
    { "Ace", "Deuce", "Three", "Four", "Five", "Six", "Seven",
    "Eight", "Nine", "Ten", "Jack", "Queen", "King" };

    for ( int card = 1; card <= 52; card++ )
    {
        for (int row = 0; row <= 3; row++ )
         {   
             for ( int column = 0; column <= 12; column++ )
             {
            if ( deck[ row ][ column ] == card )
            {
                cout << setw( 5 ) << right << face[ column ]
                << " of " << setw( 8 ) << left << suit[ row ]
                << ( card % 2 == 0 ? '\n' : '\t' );
            }
             }
        }
    }
}
主函数 DeckOfCards.h
#include "DeckOfCards.h"
int main()
{
    DeckOfCards deckOfCards;
    deckOfCards.shuffle();
    deckOfCards.deal();
    return 0;
}
5 回复
#2
mengcan5552011-10-14 11:26
class DeckOfCards
{
public:
    DeckOfCards();
    void shuffle();
    void deal();
private:
    int deck[ 4][ 1 ];
} 把1改成13
#3
mengcan5552011-10-14 11:29
还有就是 别写这么多
using std::rand;
using std::srand;
直接写成 using namespace std ; 就ok了,那样太麻烦
#4
mengcan5552011-10-14 11:30
#include <iostream>
//using std::cout;
//using std::left;
//using std::right;

#include <iomanip>
//using std::setw;

#include <cstdlib>
//using std::rand;
//using std::srand;

#include <ctime>
using namespace std;
//using std::time;
class DeckOfCards
{
public:
    DeckOfCards();
    void shuffle();
    void deal();
private:
    int deck[ 4][ 13];
};

//#include "DeckOfCards.h"

DeckOfCards::DeckOfCards()
{
    for ( int row = 0; row <= 3; row++ )
    {
        for ( int column = 0; column <= 12; column++ )
        {
            deck[ row ][ column ] = 0;
        }
    }

    srand( time( 0 ) );
}

void DeckOfCards::shuffle()
{
    int row;
    int column;

    for ( int card = 1; card <= 52; card++ )
    {
        do
        {
            row = rand() % 4;
            column = rand() % 13;
        } while( deck[ row ][ column ] != 0 );

        deck[ row ][ column ] = card;
    }
}

void DeckOfCards::deal()
{
    static const char *suit[ 4 ] =
    { "Hearts", "Diamonds", "Clubs", "Spades" };

    static const char *face[ 13 ] =
    { "Ace", "Deuce", "Three", "Four", "Five", "Six", "Seven",
    "Eight", "Nine", "Ten", "Jack", "Queen", "King" };

    for ( int card = 1; card <= 52; card++ )
    {
        for (int row = 0; row <= 3; row++ )
         {   
             for ( int column = 0; column <= 12; column++ )
             {
            if ( deck[ row ][ column ] == card )
            {
                cout << setw( 5 ) << right << face[ column ]
                << " of " << setw( 8 ) << left << suit[ row ]
                << ( card % 2 == 0 ? '\n' : '\t' );
            }
             }
        }
    }
}

//#include "DeckOfCards.h"
int main()
{
    DeckOfCards deckOfCards;
    deckOfCards.shuffle();
    deckOfCards.deal();
    return 0;
}
#5
GeneralJing2011-10-14 15:04
回复 2楼 mengcan555
多谢大侠,这个错误让我找了好久,我还以为是底下的那个洗牌函数中的时间函数设置有错误呢,多谢多谢!牛人!!!交个朋友啊哈哈
#6
GeneralJing2011-10-14 15:09
回复 3楼 mengcan555
关于using namespace std;我想问一下,是不是在一个#include下声明,所有的都不用写了,包括cin,cout,endl,srand,fixed,rand,time等等,这样对吗?
1