程序在交换机中执行第二种情况后崩溃

时间:2017-06-05 20:46:04

标签: c++

我正在编写一个程序,它应该结合我之前编写的一些不同的程序(所有这些程序都可以工作)。 我的问题: 案例'r'执行后,程序崩溃。 我的程序(对不起,德语文本,但我想这并不重要。如果只是告诉我,我会把它改成英语。):

的main.cpp

#ifndef GameMasterH
#define GameMasterH

using namespace std;

class Charakter
{
private:                
                        //Die Grundinformationen, welche manuell eingegeben         
werden
string Name;
string Geschlecht;
string Rasse;
string Beruf;
string Hautfarbe;
string Haarfarbe;
string Augenfarbe;
                        //Die Werte, welche durch RNG bestimmt werden
int Wert[9];
int spWert[58];         //Spezialwerte
int grWert[3];          //Alter/Größe/Gewicht


public:

//Konstruktor
Charakter(string, string, string, string, string, string, string);
//Destruktor
~Charakter();
//mothoden
void Werte();               //bestimmt die Grundwerte
void SchreibCharakter();    //Schreibt den Charakter
void spWerte();             //bestimmt die Spezialwerte
void grWerte();             //bestimmt Alter/Größe/Gewicht
};

}

现在我不认为我的项目中的其他魔法文件有问题但我会把它们放在这里以防万一。

GameMaster.h

#include <iostream>
#include <conio.h>
#include <string>
#include <stdio.h>
#include <cstdlib>
#include <ctime>
#include "GameMaster.h"

using namespace std;

//Konstruktor: Weist Die Grundinfos zu.
Charakter::Charakter(string N, string G, string R, string B, string HAU,     string HAA, string A) 
{
Name = N;
Geschlecht = G;
Rasse = R;
Beruf = B;
Hautfarbe = HAU;
Haarfarbe = HAA;
Augenfarbe = A;
}

//Destruktor
Charakter::~Charakter()
{

}

void Charakter::Werte()                     //Weist die Grundwerte zu
{
srand(time(0));

for(int i = 1; i < 9; i++)
{
    Wert[i] = 8+(rand()%7);
}
}

void Charakter::grWerte()                   //Weist Alter, Größe und Gewicht zu
{
srand(time(0));

grWert[1] = 18+(rand()%43);
grWert[2] = 160+(rand()%41);
grWert[3] = 70+(rand()%41); 
}

void Charakter::spWerte()                   //Weist Die spezifischen Werte zu
{
srand(time(0));

for(int i = 1; i < 58; i++)
{
    spWert[i] = (rand()%6);
}
}

void Charakter::SchreibCharakter()          //Schreibt die Textdatei
{
FILE* CharakterFile;

CharakterFile = fopen("rdmCharakter.txt", "w");

if(CharakterFile != NULL)
{
    fprintf(CharakterFile, "Name: %s \n", Name.c_str());
    fprintf(CharakterFile, "Geschlecht: %s \n", Geschlecht.c_str());
    fprintf(CharakterFile, "Rasse: %s \n", Rasse.c_str());  
    fprintf(CharakterFile, "Beruf: %s \n", Beruf.c_str());  
    fprintf(CharakterFile, "Alter: %d \n", grWert[1]);
    fprintf(CharakterFile, "Hautfarbe: %s \n", Hautfarbe.c_str());
    fprintf(CharakterFile, "Haarfarbe: %s \n", Haarfarbe.c_str());
    fprintf(CharakterFile, "Augenfarbe: %s \n", Augenfarbe.c_str());
    fprintf(CharakterFile, "Größe: %d \n", grWert[2]);
    fprintf(CharakterFile, "Gewicht: %d \n", grWert[3]);
    fprintf(CharakterFile, "Persönlichkeit: \n\n\n\n");

    fprintf(CharakterFile, "        Eigenschaften \n \n");
    fprintf(CharakterFile, "MU: %d \n", Wert[1]);
    fprintf(CharakterFile, "KL: %d \n", Wert[2]);
    fprintf(CharakterFile, "IN: %d \n", Wert[3]);
    fprintf(CharakterFile, "CH: %d \n", Wert[4]);
    fprintf(CharakterFile, "FF: %d \n", Wert[5]);
    fprintf(CharakterFile, "GE: %d \n", Wert[6]);
    fprintf(CharakterFile, "KO: %d \n", Wert[7]);
    fprintf(CharakterFile, "KK: %d \n\n\n", Wert[8]);

    fprintf(CharakterFile, "VORTEILE:           NACHTEILE:\n\n\n\n\n\n\n\n\n\n");

    fprintf(CharakterFile, "        HANDWERKSTALENTE\n\n");

    fprintf(CharakterFile, "ALCHEMIE        (KL/KL/IN): %d \n", spWert[1]);
    fprintf(CharakterFile, "HANDEL          (KL/IN/CH): %d \n", spWert[2]);
    fprintf(CharakterFile, "HEILKUNDE-GIFT      (MU/KL/IN): %d \n", spWert[3]);
    fprintf(CharakterFile, "HEILKUNDE-KRANK     (MU/KL/IN): %d \n", spWert[4]);
    fprintf(CharakterFile, "HEILKUNDE-SEELE     (KL/IN/CH): %d \n", spWert[5]);
    fprintf(CharakterFile, "HEILKUNDE-WUNDEN    (KL/FF/FF): %d \n", spWert[6]);
    fprintf(CharakterFile, "HOLZBEARBEITUNG     (KL/KK/FF): %d \n", spWert[7]);
    fprintf(CharakterFile, "LEDERBEARBEITUNG    (KL/FF/FF): %d \n", spWert[8]);
    fprintf(CharakterFile, "METALLBEARBEITUNG   (KL/FF/KK): %d \n", spWert[9]);
    fprintf(CharakterFile, "STEINBEARBEITUNG    (FF/FF/KK): %d \n", spWert[10]);
    fprintf(CharakterFile, "STOFFBEARBEITUNG    (KL/FF/FF): %d \n", spWert[11]);
    fprintf(CharakterFile, "KOCHEN&BACKEN       (KL/IN/FF): %d \n", spWert[12]);
    fprintf(CharakterFile, "SCHLÖSSERKNACKEN    (IN/FF/FF): %d \n", spWert[13]);
    fprintf(CharakterFile, "MALEN&ZEICHNEN      (KL/IN/FF): %d \n\n", spWert[14]);

    fprintf(CharakterFile, "        WISSENSTALENTE\n\n");

    fprintf(CharakterFile, "BRETT&GLÜCKSSPIEL   (KL/KL/IN): %d \n", spWert[15]);
    fprintf(CharakterFile, "GEOGRAPHIE      (KL/IN/IN): %d \n", spWert[16]);
    fprintf(CharakterFile, "GESCHICHTSWISSEN    (KL/KL/IN): %d \n", spWert[17]);
    fprintf(CharakterFile, "RELIGION        (KL/KL/CH): %d \n", spWert[18]);
    fprintf(CharakterFile, "MECHANIK        (KL/KL/FF): %d \n", spWert[19]);
    fprintf(CharakterFile, "RECHNEN         (KL/KL/KL): %d \n", spWert[20]);
    fprintf(CharakterFile, "SAGEN&LEGENDEN      (KL/KL/IN): %d \n", spWert[21]);
    fprintf(CharakterFile, "RECHTSKUNDE     (KL/IN/IN): %d \n", spWert[22]);
    fprintf(CharakterFile, "STRATEGIE       (KL/IN/IN): %d \n", spWert[23]);
    fprintf(CharakterFile, "MEDIZIN         (KL/KL/IN): %d \n", spWert[24]);
    fprintf(CharakterFile, "SEEFAHRT        (KL/IN/MU): %d \n\n", spWert[25]);

    fprintf(CharakterFile, "        NATURTALENTE\n\n");

    fprintf(CharakterFile, "FÄHRTENSUCHE        (KL/IN/IN): %d \n", spWert[26]);
    fprintf(CharakterFile, "FESSELN         (KL/FF/KK): %d \n", spWert[27]);
    fprintf(CharakterFile, "FISCHEN&ANGELN      (IN/FF/KO): %d \n", spWert[28]);
    fprintf(CharakterFile, "ORIENTIRUNG     (KL/IN/IN): %d \n", spWert[29]);
    fprintf(CharakterFile, "PFLANZENKUNDE       (KL/IN/FF): %d \n", spWert[30]);
    fprintf(CharakterFile, "TIERKUNDE       (MU/KL/IN): %d \n", spWert[31]);
    fprintf(CharakterFile, "WILDNISLEBEN        (IN/GE/KO): %d \n", spWert[32]);
    fprintf(CharakterFile, "JAGEN           (IN/KL/GE): %d \n", spWert[33]);
    fprintf(CharakterFile, "STERNKUNDE      (KL/KL/IN): %d \n\n", spWert[34]);

    fprintf(CharakterFile, "        KÖRPERTALENTE\n\n");        

    fprintf(CharakterFile, "KLETTERN        (MU/GE/KK): %d \n", spWert[35]);
    fprintf(CharakterFile, "BALANCIEREN     (GE/GE/KO): %d \n", spWert[36]);
    fprintf(CharakterFile, "REITEN          (IN/GE/KO): %d \n", spWert[37]);
    fprintf(CharakterFile, "SCHWIMMEN       (GE/KO/KK): %d \n", spWert[38]);
    fprintf(CharakterFile, "SELBSTBEHERRSCHUNG  (MU/IN/KO): %d \n", spWert[39]);
    fprintf(CharakterFile, "SINGEN          (IN/CH/KL): %d \n", spWert[40]);
    fprintf(CharakterFile, "SINNESSCHÄRFE       (KL/IN/IN): %d \n", spWert[41]);
    fprintf(CharakterFile, "TANZEN          (CH/GE/GE): %d \n", spWert[42]);
    fprintf(CharakterFile, "TASCHENDIEBSTAHL    (MU/IN/FF): %d \n", spWert[43]);
    fprintf(CharakterFile, "VERBERGEN       (MU/IN/GE): %d \n", spWert[44]);
    fprintf(CharakterFile, "ZECHEN          (IN/KO/KK): %d \n", spWert[45]);
    fprintf(CharakterFile, "SCHLEICHEN      (GE/GE/KO): %d \n", spWert[46]);
    fprintf(CharakterFile, "MUSIKINSTRUMENTE    (KL/IN/KO): %d \n", spWert[47]);
    fprintf(CharakterFile, "REFLEXE         (GE/GE/FF): %d \n\n", spWert[48]);

    fprintf(CharakterFile, "        GESELLSCHAFTSTALENTE\n\n");

    fprintf(CharakterFile, "PREDIGEN        (MU/KL/IN): %d \n", spWert[49]);
    fprintf(CharakterFile, "ÜBERZEUGEN      (MU/IN/CH): %d \n", spWert[50]);
    fprintf(CharakterFile, "BETÖREN         (MU/CH/CH): %d \n", spWert[51]);
    fprintf(CharakterFile, "EINSCHÜCHTERN       (MU/KK/KK): %d \n", spWert[52]);
    fprintf(CharakterFile, "ETIKETTE        (KL/IN/CH): %d \n", spWert[53]);
    fprintf(CharakterFile, "GASSENWISSEN        (KL/IN/IN): %d \n", spWert[54]);
    fprintf(CharakterFile, "MENSCHENKENNTNIS    (KL/IN/CH): %d \n", spWert[55]);
    fprintf(CharakterFile, "ÜBERREDEN       (MU/KL/CH): %d \n", spWert[56]);
    fprintf(CharakterFile, "VERKLEIDEN      (IN/CH/GE): %d \n", spWert[57]);
    fprintf(CharakterFile, "WILLENSKRAFT        (MU/MU/IN): %d \n\n", spWert[58]);  

    fprintf(CharakterFile, "        KAMPFTECHNIKEN\n\n");

    fprintf(CharakterFile, "ARMBRÜSTE       FF: \n");
    fprintf(CharakterFile, "BÖGEN           FF: \n");
    fprintf(CharakterFile, "MESSER          GE: \n");
    fprintf(CharakterFile, "HIEBWAFFEN      KK: \n");
    fprintf(CharakterFile, "KETTENWAFFEN        KK: \n");
    fprintf(CharakterFile, "RAUFEN          GE: \n");
    fprintf(CharakterFile, "SCHILDE         KK: \n");
    fprintf(CharakterFile, "SCHWERTER       KK: \n");
    fprintf(CharakterFile, "WURFWAFFEN      FF: \n");
    fprintf(CharakterFile, "SCHUSSWAFFEN L      FF: \n");
    fprintf(CharakterFile, "SCHUSSWAFFEN M      GE: \n");
    fprintf(CharakterFile, "SCHUSSWAFFEN S      KK: \n\n");

    fprintf(CharakterFile, "NAHKAMPFWAFFEN:\n\n\n\n\n\n");

    fprintf(CharakterFile, "FERNKAMPFWAFFEN:\n\n\n\n\n\n");

    fprintf(CharakterFile, "INVENTAR:\n\n\n\n\n\n");

    fclose(CharakterFile);
}
else
{
    cout << "Error: Die Datei kann nicht geoeffnet werden.";        //Gibt eine Fehlermeldung aus, falls die Text datei nicht geöffnet werden kann
}
}

Charakter.cpp

{{1}}

1 个答案:

答案 0 :(得分:3)

这不正确

grWert[3] = 70+(rand()%41);

你的数组大小是3,但索引是0-2,3将超过数组的结尾。