2012-01-17 3 views
-2

C/C++에 문제가 있습니다. 아래 코드는 실제로 내 코드입니다. 메뉴가 Option 1에 의해 히트되면정상적으로 실행되어 결과를 표시하고 메뉴를 다시 표시합니다. 그러나 이후에는 아무 것도 입력 할 수 없습니다. 그 이유는 무엇입니까? 도와 주시는 분께 미리 감사드립니다. C++ C 루프 문제

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

그래서 당신은 아무것도 입력 할 수 없습니다

:

편집 해,이 내 모든 첫째 후

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

메인 루프 stdin 인해 지금 파일 "file.txt를"입니다 명령 프롬프트. 당신이 "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