2017-04-24 1 views
1
enum state{ 
    state_Mmenu,   // State 0 
    state_settingmenu,  // State 1 
    state_gamemenu,   // State 2 
    state_savegamemenu,  // State 3 
    state_loadgamemenu,  // State 4; 
    state_Exit,    // State 5; 
    state_other 
}; 

state stateMmenu(); 
state statesettingmenu(string, string); 
state stategamemenu(); 
state statesavegamemenu(string, string, string, ofstream&); 
state stateloadgamemenu(string, string, string, ifstream&); 
state stateExit(); 



int main() 
{ 
    state curr=state_other; 

    string filename= "PlayerOne.jak"; 
    string fname="Player"; 
    string lname="One"; 
    ifstream inFS; 
    ofstream outFS; 

    while(curr != state_Exit) 
    { 
     switch(curr) 
     { 
      case state_Mmenu: 
       curr = stateMmenu(); 
       break; 

      case state_settingmenu: 
       curr = statesettingmenu(fname, lname); 
       break; 

      case state_gamemenu: 
       curr = stategamemenu(); 
       break; 

      case state_savegamemenu: 
       curr = statesavegamemenu(fname, lname, filename, outFS); 
       break; 

      case state_loadgamemenu: 
       curr = stateloadgamemenu(fname, lname, filename, inFS); 
       break; 

      default: 
       cout << "Don't Tip the Vending Machine"<<endl; 
       curr = state_Mmenu; 
       break; 
     } 
    } 

    return 0; 
} 


state statesavegamemenu(string fname, string lname, string filename, 
         ofstream outFS) 
{ 
    state next=state_savegamemenu; 
    int choice4=0; 
    cout<<" -Save Game Menu-----------------"<<endl; 
    cout<<"1. File Name - "<<filename<<endl; 
    cout<<"2. Save" <<endl; 
    cout<<"3. Game Menu" <<endl; 
    cout<<"----------------------------"<<endl; 
    do 
    { 
     cout << "Choice? "<< endl; 
     cin >> choice4; 
     cin.clear(); 
     cin.ignore(10000,'\n'); 

    } while(!cin.good()); 

    switch(choice4) 
    { 
     case 1: 
     { 
      cout<<"What would you like to save this file as? "; 
      cin>>filename; 
      cout<<endl; 
      next = state_savegamemenu; 
     } 
      break; 
     case 2: 
     { 
      outFS.open(filename.c_str()); 
      if(!outFS.is_open()) 
      { 
       next = state_savegamemenu; 
       break; 
      } 
      else 
      { 
       outFS<<fname<<endl; 
       outFS<<lname<<endl; 
      } 
      outFS.close(); 
      next = state_savegamemenu; 
     } 

      break; 
     case 3: 
      next = state_gamemenu; 
      break; 
     default: 
      cout << "Bad Input!"<<endl; 
      next = state_savegamemenu; 
      break; 
    } 
    cout <<endl; 
    return next; 
} 

state stateloadgamemenu(string fname, string lname, string filename, 
         ifstream inFS) 
{ 
    state next=state_loadgamemenu; 
    int choice5=0; 
    cout<<" -Save Game Menu-----------------"<<endl; 
    cout<<"1. File Name - "<<filename<<endl; 
    cout<<"2. Load" <<endl; 
    cout<<"3. Main Menu" <<endl; 
    cout<<"----------------------------"<<endl; 
    string filecontent; 
    do 
    { 
     cout << "Choice? "<< endl; 
     cin >> choice5; 
     cin.clear(); 
     cin.ignore(10000,'\n'); 

    } while(!cin.good()); 

    switch(choice5) 
    { 
     case 1: 
     { 
      cout<<"What file would you like to load? "; 
      cin>>filename; 
      cout<<endl; 
      next = state_loadgamemenu; 
     } 
      break; 
     case 2: 
     { 
      inFS.open(filename.c_str()); 
      if(!inFS.is_open()) 
      { 
       next = state_savegamemenu; 
       break; 
      } 
      else 
      { 
       while(!inFS.eof()) 
       { 
        inFS >> filecontent; 
        if(inFS.good()) 
        { 
         cout << filecontent << endl; 
        } 
       } 
      } 
      inFS.close(); 
      next = state_loadgamemenu; 
     } 

      break; 
     case 3: 
      next = state_Mmenu; 
      break; 
     default: 
      cout << "Bad Input!"<<endl; 
      next = state_loadgamemenu; 
      break; 
    } 
    cout <<endl; 
    return next; 
} 

私の問題はコード内でユーザーからcinというファイル名を上書きしようとしていることです。問題は、私が状態マシンをリフレッシュするとき、ファイル名が上書きされず、それが私がint main()で指定した "playerone.jak"であるということです。なぜ誰かがこれが大いに評価されることを知っていれば。文字列変数がシンを使用しているときに上書きされない

+1

のために、この質問に審判ができ

... – mutex36

+0

は、参照することによって、あなたの 'filename'パラメータを渡します。ここはコピーです。 –

+0

文字列ポインタを使用することを意味しますか? – flameboy7365

答えて

0

この機能

state stateloadgamemenu(string fname, string lname, string filename, 
         ifstream inFS) 

state stateloadgamemenu(string fname, string lname, string & filename, 
         ifstream inFS) 

理由であるべきであるあなたは、文字列または呼び出された関数内の任意の変更を意味し、それが値で渡されるC++で任意のオブジェクトを渡すときます元の変数には保存されません。

参照を渡すと、同じオブジェクトが呼び出された関数から呼び出し元に変更を返すことを意味します。あなたが代わりに、すべての関連するコードを投稿してください詳細 Pass by Reference/Value in C++

+0

問題は何だったのですか? – flameboy7365

関連する問題