2012-01-17 26 views
-2

C/C++に問題があります。 以下は実際に私のコードです。 メニューがオプション1でヒットすると、通常通りの結果が表示され、表示されます。メニューを再表示します。 しかし、後で何も入力することはできません。 なぜそうですか? あらかじめ助けてくれた人に感謝します。C++ Cループの問題

EDITTED、最初のループstdinは今起因するファイル "file.txtは" 後これは

int main() 
{ 
int Option; 
Menu m; 
do 
{ 
    m.showMenu(); 
    cout<<"Please enter your choice:"; 
    cin>>Option; 



    if (Option == 1) 
    { 

     int scenario = 0; 
     string Lines; 
     Mobile mobileObj; 

     freopen("file.txt","r",stdin); 


     while(true) 
     { 
      getline(cin,Lines); 
      while(Lines.length() > 1 && Lines[0] == ' ') Lines = Lines.substr(1); 
      if(Lines.length() == 1 && Lines[0] == ' ') continue; 

      if(scenario == 0) 
      { 
       if(Lines == "Mobile Phones & Accessories Classifieds") 
       { 
        scenario = 1; 
        getline(cin,Lines); 
        continue; 
       } 
      } 

      else if(scenario == 1) 
      { 
       if(Lines[0] == '*') continue; 
       else scenario = 2; 
      } 

      else if(scenario == 2) 
      { 
       if(Lines[0] == '[') 
       { 
        for(unsigned int i=0;i<Lines.length();++i) 
        { 
         if(Lines[i] == ']') 
         { 
          mobileObj.mobDevName = Lines.substr(i+1); 
          break; 
         } 
        } 
       } 

       else if(Lines.length() > 11 && is_number(Lines[0]) && is_number(Lines[1]) && is_number(Lines[10])) 
       { 
        mobileObj.dateOfPub = Lines.substr(0,11); 
       } 

       else if(Lines.length() >= 5 && Lines[0] == 'S' && Lines[1] == '$') 
       { 
        mobileObj.price = Lines; 
        v_Mob.push_back(mobileObj); 
       } 

       else if(Lines == "Browse Marketplace Listings") break; 
      } 

     } 


    cout<<("[Mobile device Name] – [Date of publish] – [Mobile phones’ pricings]\n"); 

    for(unsigned int i=0;i<v_Mob.size();++i) 
    { 
     cout << i+1 << ") "; 
     v_Mob[i].print(); 
    } 

    cout<<"\n"; 
    cout<<"Going back to main menu ...\n"; 
    cout<<"\n"; 
} 

else if (Option == 2) 
    { 
     cout<<"hi\n"; 
    } 

}while(Option != 0); 

return 0; 
} 
+0

コードの残りの部分はありますか?たとえば、 'do'ループを終了する条件が何であるかを知りたい。 –

答えて

1

私の全体のMAIN IS:だからあなたから何も入力できない

freopen("file.txt","r",stdin); 

コマンド・プロンプト。

あなたは「file.txtは」ifstreamを使うから読み取る必要がある場合:

std::ifstream in("file.txt"); 
if (in.is_open()) 
{ 
    while (std::getline(in, Lines)) 
    { 
     // ... 
    } 
    in.close(); 
} 
+0

'fopen()'を使って新しい 'FILE *'を得る –

+0

こんにちはhmjd、私はifstreamに変更しようとしました、それは私の上にハングアップします。私は本当にそれがなぜ本当にわからない。 – Andres

+0

@Andres、 'while'ループの終了条件を更新しました。 – hmjd