2017-06-05 57 views
-1

我正在編寫一個應該結合我之前編寫的幾個不同程序的程序(之後所有工作)。 我的問題: 案例'r'執行後,Programm崩潰。 我PROGRAMM(很抱歉的文字在德國beeing,但我想這並不重要太多如果它只是告訴我,我將其更改爲英語。):在交換機中執行第二個case後程序崩潰

的main.cpp

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

using namespace std; 

int main(int argc, char** argv) { 

string vBefehlH = "help";  //vergleichsBefehlX 
string vBefehlR = "rdm"; 
string vBefehlI = "items"; 
string eBefehl;     //eingegebener Befehl 
char Befehl; 

cout << "------Willkommen GameMaster------" << endl <<endl; 
cout << "Geben sie *help* ein, um eine Liste der verf\201gbaren Befehle auszugeben." << endl; 
while(1) 
{ 
    cin >> Befehl;    //wartet auf die eingabe eines Befehls 

    if(eBefehl == vBefehlH) 
    { 
     Befehl = 'h'; 
    } 

    if(eBefehl == vBefehlR) 
    { 
     Befehl = 'r'; 
    } 

    switch(Befehl) 
    { 
     case 'h':  //gibt die Hilfe aus 
     {  
      cout << "help  -Gibt eine Liste aller verf\201gbaren Befehle im aktuellen Bereich aus." << endl; 
      cout << "rdm  -Erstellt einen neuen Charakter." << endl; 
      cout << "items  -Geht in den Item Bereich." << endl; 

      break; 
     } 

     case 'r': 
     { 
      string Name; 
      string Geschlecht; 
      string Rasse; 
      string Beruf; 
      string Hautfarbe; 
      string Haarfarbe; 
      string Augenfarbe; 

      cout << "Name: "; 
      cin >> Name;   //cin muss aus irgendeinem Grund doppelt sein. Sonst wird es übersprungen. 
      cin >> Name; 
      cout << "Geschlecht: "; 
      cin >> Geschlecht; 
      cout << "Rasse: "; 
      cin >> Rasse; 
      cout << "Beruf: "; 
      cin >> Beruf; 
      cout << "Hautfarbe: "; 
      cin >> Hautfarbe; 
      cout << "Haarfarbe: "; 
      cin >> Haarfarbe; 
      cout << "Augenfarbe: "; 
      cin >> Augenfarbe; 

      Charakter Charakter1(Name, Geschlecht, Rasse, Beruf, Hautfarbe, Haarfarbe, Augenfarbe); 

      Charakter1.Werte(); 
      Charakter1.grWerte(); 
      Charakter1.spWerte(); 
      Charakter1.SchreibCharakter(); 
      cout << endl << "Der Charakter wurde erfolgreich erstellt und befindet sich in *rdmCharakter.txt*" << endl; 
      system ("pause"); 
      break; 
     } 
    } 
} 

return 0; 

}

現在我不認爲我的項目中的其他女巫文件有問題,但我只是把它們放在這裏以防萬一。

GameMaster.h

#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 
}; 

Charakter.cpp

#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 
} 
} 
+3

這裏有** LOT **額外的代碼。刪除它,並提供[_Minimal_,Complete和Verifiable示例](https://stackoverflow.com/help/mcve)(Emphasis Mine)。 –

+0

請不要賦予變量大寫字母的名字。類和結構,可以給大寫字母名稱。帶有大寫字母名稱的變量很難區分類名稱。 – Xirema

+0

不要''_just把它放在那裏。刪除不必要的代碼 –

回答

3

這是不正確

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

你的陣列是3的尺寸,但指數隨後0-2 ,3將超過數組的末尾。

相關問題