有谁知道为什么我的程序出现运行时错误并崩溃?我似乎无法弄明白。似乎没有调试选项。它只是在发射时崩溃。请帮我完全回答我的问题,并对此表示友好。我希望你们都能帮助我。
#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;
}
答案 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
循环实际上是从阵列边界写出第十四张牌,因此崩溃。