C ++卡相关程序无法编译。 (运行时错误)

时间:2014-12-12 04:17:14

标签: c++

有谁知道为什么我的程序出现运行时错误并崩溃?我似乎无法弄明白。似乎没有调试选项。它只是在发射时崩溃。请帮我完全回答我的问题,并对此表示友好。我希望你们都能帮助我。

#include <cstdlib>
#include <iostream>
#include <ctime>
#include <math.h>
using namespace std;

class Card {
    private:
        string suit;
        string face;
        int number;

    public:
        Card (string cardsuit , int cardnumber){
            suit = cardsuit;
            number = cardnumber;
        }

        Card () {
            suit = "";
            number = 0;
        }

        void setcard (string cardsuit){
            suit = cardsuit;
        }

        void setnumber( int cardnumber){
            number = cardnumber;
        }

        void display() {
            if(number == 0) {
                cout << "" ;
            }
            else
                (cout << number << " of " << suit << endl)  ;
        }
};

int main(int argc, char *argv[])
{
    Card acard[52];

    for (int i = 0; i <= 13; i++){
        acard[i] = Card("Hearts " , i+1);
    }  

    for (int i = 0; i <= 13; i++) {
        acard[i+13] = Card("Diamonds " , i+1);
    }

    for (int i = 0; i <= 13; i++) {
        acard[i+26] = Card("Clubs " , i+1);
    }

   for (int i = 0; i <= 13; i++) {
        acard[i+39] = Card("Spades " , i+1);
    }

    for (int i = 0; i < 52; i++) {
        acard[i].display();
    }

    cout << endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}

2 个答案:

答案 0 :(得分:1)

逻辑错误......

你在功能上用“1钻石”覆盖了“14 of Hearts”。你也可以在其余的西装上做到这一点。

acard[i] = Card("Hearts " , i+1);      // i is 13
acard[i+13] = Card("Diamonds " , i+1); // i is 0

写出数组的结尾...

在最后一次for循环期间,最后一次迭代使用以下内容写入数组末尾:

acard[i+39] = Card("Spades " , i+1);   // i is 13

另外...

cout括号内的Card::display()表达式只是奇怪的。

答案 1 :(得分:0)

你的循环实际上每个都写了14张卡片:

for (int i = 0; i <= 13; i++){
    // ...

从0到13(包括0和13)运行时,它们应该从0到12(或从1到13,每次都不需要从0开始)。

Heart,Diamonds和Clubs的第十四张卡片在下一套服装的循环中被覆盖,没有任何其他不良影响,但是黑桃的for循环实际上是从阵列边界写出第十四张牌,因此崩溃。