2017-02-07 16 views
0

するのではなく、プリントアウト私は、ゲーム内でクレートを開くシミュレートするために、この簡単なプログラムを作ってみました。しかし、1、2、または3を最初に入力し、100のように大きな数字を続けて入力すると、ほとんどすべてが正しく出力されますが、時には(100回のうち1回または2回)文字列の代わりに印刷する必要があります。何故ですか?奇妙な記号は、文字列

#include <iostream> 
#include <cstdlib> 
#include <ctime> 
#include <string> 
#include <windows.h> 

using namespace std; 
//This function is only here to make retrieving random numbers more pretty. 
int getrand(int min, int max); 
//This function will return what level of rarity the item is as a string. 
string getrare(); 
//This function will return the certification of the item as a string. 
string getcert(); 
//This function will return the crate being opened to a string, and will error check. 
string cratePrompt(); 
//This function will return the specific item received from a specific crate. 
string getitem(string crateNum); 
int rareCount=0; 
int veryrareCount=0; 
int importCount=0; 
int exoticCount=0; 
int blackmarketCount=0; 
int certCount=0; 


int main(){ 

    unsigned seed; 
    //This group of text here is to get a seed for randomness. 
    seed=time(0); 
    srand(seed); 

    //This is where the magic happens. 
    int count=0; 
    int crateQuantity; 
    string certTest; 
    string crateChosen; 
    crateChosen=(cratePrompt()); 
    cout<<"\nHow many crates do you want to open?\n\n"; 
    cin>>crateQuantity; 
    cout<<endl; 
    string itemActual; 
    while(count<crateQuantity){ 
     certTest=getcert(); 
     if (certTest!="Null"){ 
     cout<<certTest<<" "; 
     } 
     cout<<getitem(crateChosen); 
     cout<<endl; 
     count++; 
    } 
    cout<<"\n\n\nYou got "<<rareCount<<" Rare items!\n"; 
    cout<<"You got "<<veryrareCount<<" Very Rare items!\n"; 
    cout<<"You got "<<importCount<<" Import items!\n"; 
    cout<<"You got "<<exoticCount<<" Exotic items!\n"; 
    cout<<"You got "<<blackmarketCount<<" Black Market items!\n\n"; 
    cout<<certCount<<" of the items were certified!"; 
} 

int getrand(int min, int max){ 
    return ((rand()%(max-min+1))+min); 
} 
string getrare(){ 
int rando=(getrand(1,10000)); 
if ((rando>=1)&&(rando<=5472)){ 
    rareCount++; 
    return "Rare"; 
} 
else if ((rando>=5473)&&(rando<=8264)){ 
    veryrareCount++; 
    return "Very Rare"; 
} 
else if ((rando>=8265)&&(rando<=9476)){ 
    importCount++; 
    return "Import"; 
} 
else if ((rando>=9477)&&(rando<=9868)){ 
    exoticCount++; 
    return "Exotic"; 
} 
else if ((rando>=9869)&&(rando<=10000)){ 
    blackmarketCount++; 
    return "Black Market"; 
} 
else{ 
    return "An error has happened"; 
} 
} 
string getcert(){ 
    int iscert=getrand(1,100); 
    int whichcert=getrand(1,15); 
    if ((iscert>=16)&&(iscert<=100)){ 
    return "Null"; 
    } 
    else if ((iscert>=1)&&(iscert<=15)){ 
    certCount++; 
    if (whichcert==1){ 
     return "[Acrobat]"; 
    } 
    if (whichcert==2){ 
     return "[Aviator]"; 
    } 
    if (whichcert==3){ 
     return "[Goalkeeper]"; 
    } 
    if (whichcert==4){ 
     return "[Guardian]"; 
    } 
    if (whichcert==5){ 
     return "[Juggler]"; 
    } 
    if (whichcert==6){ 
     return "[Paragon]"; 
    } 
    if (whichcert==7){ 
     return "[Playmaker]"; 
    } 
    if (whichcert==8){ 
     return "[Scorer]"; 
    } 
    if (whichcert==9){ 
     return "[Show-Off]"; 
    } 
    if (whichcert==10){ 
     return "[Sniper]"; 
    } 
    if (whichcert==11){ 
     return "[Striker]"; 
    } 
    if (whichcert==12){ 
     return "[Sweeper]"; 
    } 
    if (whichcert==13){ 
     return "[Tactician]"; 
    } 
    if (whichcert==14){ 
     return "[Turtle]"; 
    } 
    if (whichcert==15){ 
     return "[Victor]"; 
    } 
    } 
    else{ 
    return "An error has happened"; 
    } 
} 
string cratePrompt(){ 
    string answer; 
    bool valid=0; 

    while (valid==0){ 
    cout<<"Which crate do you want to open?\n\n"; 
    cin>>answer; 
    if ((answer=="1")||(answer=="c1")||(answer=="cc1")||(answer=="C1")||(answer=="CC1")){ 
    return "CC1"; 
    } 
    else if ((answer=="2")||(answer=="c2")||(answer=="cc2")||(answer=="C2")||(answer=="CC2")){ 
    return "CC2"; 
    } 
    else if ((answer=="3")||(answer=="c3")||(answer=="cc3")||(answer=="C3")||(answer=="CC3")){ 
    return "CC3"; 
    } 
    else if ((answer=="4")||(answer=="c4")||(answer=="cc4")||(answer=="C4")||(answer=="CC4")){ 
    return "CC4"; 
    } 
    else{ 
    cout<<"Please enter a valid option (1, 2, 3, or 4)\n"; 
    } 
    } 
} 
string getitem(string crateNum){ 
    string rarity = getrare(); 
    //(Rarity)Select is used to select exactly which item they will get out of the possibilities. 
    int BMSelect= getrand(1,6); 
    int ESelect= getrand(1,2); 
    int ISelect= getrand(1,3); 
    int VRSelect= getrand(1,4); 
    int RSelect= getrand(1,5); 
    if (crateNum=="CC1"){ 
    if (rarity=="Rare"){ 
     if(RSelect==1){ 
     return "(Takumi) Combo"; 
     } 
     else if(RSelect==2){ 
     return "(Breakout) Vice"; 
     } 
     else if(RSelect==3){ 
     return "(Dominus) Pollo Caliente"; 
     } 
     else if(RSelect==4){ 
     return "(Dominus) Arcana"; 
     } 
     else if(RSelect==5){ 
     return "(Breakout) Shibuya"; 
     } 
    } 
    else if (rarity=="Very Rare"){ 
     if (VRSelect==1){ 
     return "(Takumi) Anubis"; 
     } 
     else if (VRSelect==2){ 
     return "(Breakout) Dot Matrix"; 
     } 
     else if (VRSelect==3){ 
     return "(Dominus) Snakeskin"; 
     } 
     else if (VRSelect==4){ 
     return "Chakrams"; 
     } 
    } 
    else if (rarity=="Import"){ 
     if (ISelect==1){ 
     return "Dominus GT"; 
     } 
     else if (ISelect==2){ 
     return "Trinity"; 
     } 
     else if (ISelect==3){ 
     return "Takumi RX-T"; 
     } 
    } 
    else if (rarity=="Exotic"){ 
     if (ESelect==1){ 
     return "Photons"; 
     } 
     else if (ESelect==1){ 
     return "Loopers"; 
     } 
    } 
    else if (rarity=="Black Market"){ 
     if (BMSelect==1){ 
     return "Biomass"; 
     } 
     else if (BMSelect==2){ 
     return "Heatwave"; 
     } 
     else if (BMSelect==3){ 
     return "Hexed"; 
     } 
     else if (BMSelect==4){ 
     return "Slipstream"; 
     } 
     else if (BMSelect==5){ 
     return "Parallax"; 
     } 
     else if (BMSelect==6){ 
     return "Labyrinth"; 
     } 
    } 
    else{ 
     cout<<"AN ERROR HAS OCCURED"; 
    } 
    } 
    if (crateNum=="CC2"){ 
    if (rarity=="Rare"){ 
     if(RSelect==1){ 
     return "(Octane) Dragon Lord"; 
     } 
     if(RSelect==2){ 
     return "(Venom) Nine Lives"; 
     } 
     if(RSelect==3){ 
     return "(Road Hog) Carbonated"; 
     } 
     if(RSelect==4){ 
     return "(Takumi) Whizzle"; 
     } 
     if(RSelect==5){ 
     return "(Merc) Narwhal"; 
     } 
    } 
    else if (rarity=="Very Rare"){ 
     if (VRSelect==1){ 
     return "(Octane) Distortion"; 
     } 
     if (VRSelect==2){ 
     return "(Merc) Warlock"; 
     } 
     if (VRSelect==3){ 
     return "Polygonal"; 
     } 
     if (VRSelect==4){ 
     return "(X-Devil) Snakeskin"; 
     } 
    } 
    else if (rarity=="Import"){ 
     if (ISelect==1){ 
     return "X-Devil Mk2"; 
     } 
     if (ISelect==2){ 
     return "Road Hog XL"; 
     } 
     if (ISelect==3){ 
     return "Pixel Fire"; 
     } 
    } 
    else if (rarity=="Exotic"){ 
     if (ESelect==1){ 
     return "Lightnings"; 
     } 
     if (ESelect==1){ 
     return "Lobos"; 
     } 
    } 
    else if (rarity=="Black Market"){ 
     if (BMSelect==1){ 
     return "Biomass"; 
     } 
     if (BMSelect==2){ 
     return "Heatwave"; 
     } 
     if (BMSelect==3){ 
     return "Hexed"; 
     } 
     if (BMSelect==4){ 
     return "Slipstream"; 
     } 
     if (BMSelect==5){ 
     return "Parallax"; 
     } 
     if (BMSelect==6){ 
     return "Labyrinth"; 
     } 
    } 
    else{ 
     cout<<"AN ERROR HAS OCCURED"; 
    } 
    } 
    if (crateNum=="CC3"){ 
    if (rarity=="Rare"){ 
     if(RSelect==1){ 
     return "(Breakout) Falchion"; 
     } 
     if(RSelect==2){ 
     return "(Breakout) Turbo"; 
     } 
     if(RSelect==3){ 
     return "(Dominus) Mondo"; 
     } 
     if(RSelect==4){ 
     return "(Octane) Shisa"; 
     } 
     if(RSelect==5){ 
     return "(Masamune) Oni"; 
     } 
    } 
    else if (rarity=="Very Rare"){ 
     if (VRSelect==1){ 
     return "(Takumi) Distortion"; 
     } 
     if (VRSelect==2){ 
     return "(Breakout) Snakeskin"; 
     } 
     if (VRSelect==3){ 
     return "Troikas"; 
     } 
     if (VRSelect==4){ 
     return "(Octane) MG-88"; 
     } 
    } 
    else if (rarity=="Import"){ 
     if (ISelect==1){ 
     return "Breakout Type-S"; 
     } 
     if (ISelect==2){ 
     return "Hypernova"; 
     } 
     if (ISelect==3){ 
     return "Dark Matter"; 
     } 
    } 
    else if (rarity=="Exotic"){ 
     if (ESelect==1){ 
     return "Pulsus"; 
     } 
     if (ESelect==1){ 
     return "Discotheques"; 
     } 
    } 
    else if (rarity=="Black Market"){ 
     if (BMSelect==1){ 
     return "Biomass"; 
     } 
     if (BMSelect==2){ 
     return "Heatwave"; 
     } 
     if (BMSelect==3){ 
     return "Hexed"; 
     } 
     if (BMSelect==4){ 
     return "Slipstream"; 
     } 
     if (BMSelect==5){ 
     return "Parallax"; 
     } 
     if (BMSelect==6){ 
     return "Labyrinth"; 
     } 
    } 
    else{ 
     cout<<"AN ERROR HAS OCCURED"; 
    } 
    } 
if (crateNum=="CC4"){ 
    if (rarity=="Rare"){ 
     if(RSelect==1){ 
     return "(Octane) Dragon Lord"; 
     } 
     if(RSelect==2){ 
     return "(Venom) Nine Lives"; 
     } 
     if(RSelect==3){ 
     return "(Road Hog) Carbonated"; 
     } 
     if(RSelect==4){ 
     return "(Takumi) Whizzle"; 
     } 
     if(RSelect==5){ 
     return "(Merc) Narwhal"; 
     } 
    } 
    else if (rarity=="Very Rare"){ 
     if (VRSelect==1){ 
     return "(Octane) Distortion"; 
     } 
     if (VRSelect==2){ 
     return "(Merc) Warlock"; 
     } 
     if (VRSelect==3){ 
     return "Polygonal"; 
     } 
     if (VRSelect==4){ 
     return "(X-Devil) Snakeskin"; 
     } 
    } 
    else if (rarity=="Import"){ 
     if (ISelect==1){ 
     return "X-Devil Mk2"; 
     } 
     if (ISelect==2){ 
     return "Road Hog XL"; 
     } 
     if (ISelect==3){ 
     return "Pixel Fire"; 
     } 
    } 
    else if (rarity=="Exotic"){ 
     if (ESelect==1){ 
     return "Lightnings"; 
     } 
     if (ESelect==1){ 
     return "Lobos"; 
     } 
    } 
    else if (rarity=="Black Market"){ 
     if (BMSelect==1){ 
     return "Biomass"; 
     } 
     if (BMSelect==2){ 
     return "Heatwave"; 
     } 
     if (BMSelect==3){ 
     return "Hexed"; 
     } 
     if (BMSelect==4){ 
     return "Slipstream"; 
     } 
     if (BMSelect==5){ 
     return "Parallax"; 
     } 
     if (BMSelect==6){ 
     return "Labyrinth"; 
     } 
    } 
    else{ 
     cout<<"AN ERROR HAS OCCURED"; 
    } 
    } 
} 
+1

どのようなシンボルですか?あなたはあなたのデバッガを使ってみましたか?問題が発生したシードを見つけて、そのシードを 'srand'と組み合わせて再現性のあるエラーを得ることができます。 –

+0

短い例を作成してください。 – synchronizer

+0

シード505を使用し、1と100の入力を使用すると、シンボルは下からいくつかの結果が表示されます。 – user2840634

答えて

0

返さずに終了できる文字列を返す関数があることは間違いありません。この結果、C++が注目すべき有名な「未定義の動作」が発生します。 C++に戻ることなく、関数のスコープを終了することを

注デフォルト-構築しない戻り値を。上記のコメントのように警告を追加すると、それらを指摘する必要があります。他の条項で

、あなたはあなたが

#include <assert.h> 

... 

string get_stuff() { 
    if (something) { 
     ... 
    } else if (something_els) { 
     ... 
    } else { 
     assert(!"Default case hit"); 
    } 
} 

これはほとんどの環境では、デバッガでプログラムを停止することを作り、そして含む有益なメッセージを印刷する必要があります

cout << "AN ERROR HAS OCCURRED"; 

のバリエーションを持っていますデフォルトのケースもヒットした行番号。上記のアドバイスと同様に

、あなたはまた、デバッガでウォークスルー、コードが復帰することなく、関数の最後を歩くと自分自身のために見ることができます。