2014-02-11 3 views
0

C++에서 아무 것도하지 않았으므로 시간이 지났습니다. while while 루프에서 매우 이상한 동작이 나타납니다. 사용자가 무한한 수의 명령을 실행할 수 있도록 설계되었으며 문자열의 내용으로 실행할 명령을 결정합니다.while 루프는 메서드 완료를 기다리지 않습니다.

여기에 관심있는 코드입니다 :

string run; 
    size_t found; 
    bool understood; 
    while (true) 
    { 
      run = ""; 
      found = string::npos; 
      cout << "Please enter command(s)" << endl; 
      cout << "\> "; 
      cin >> run; 
      found = run.find("convert"); 
      cout << found << endl; 
      understood = false; 
      if (found != string::npos) 
      { 
        cout << "Converting DNA" << endl; 
        understood = true; 
        convert(); 
      } 
      found = run.find("purify"); 
      if (found != string::npos) 
      { 
        cout << "Purifying DNA" << endl; 
        purify(); 
        understood = true; 
      } 
      found = run.find("build"); 
      if (found != string::npos) 
      { 
        cout << "Building overlaps" << endl; 
        buildOverlaps(); 
        understood = true; 
      } 
      found = run.find("close"); 
      if (found != string::npos) 
      { 
        cout << "Goodbye" << endl; 
        break; 
      } 
      if (understood == false) cout << "I'm sorry, I didn't understand you" << endl; 
    } 

난 그냥 경우 관련 내 원래의 방법에서 이동 문자열 == "문자열"여러 명령은 같은 라인으로 실행할 수 있도록. 나는이 새로운 코드를 실행할 때, 나는 그래서 기본적으로

Please enter command(s) 
> run converter 
(some long, nonzero, number) 
I'm sorry, I didn't understand you 
Please enter command(s) 
> 0 
Converting DNA 

을 얻을, 문자열에 걸릴 블록의 경우 (마지막 제외)을 건너 뛰고 다음 주위에 다시 포장하고 적절한 방법을 실행하기 위해 나타납니다. 그것은 모든 것이 효과가 있으므로 사소한 성가심 일뿐입니다.하지만 그 행동을 이해하고 싶습니다.

숫자는 발견 된 문자열 색인의 디버그 출력이며 테스트 실행이 아닌 경우에는 표시되지 않습니다.

+1

입력란에 'run converter'라고 입력해야합니까? 'cin >> run'에 대한 한 번의 호출로 전체 문자열 "run converter"를 얻으려고하십니까? 스트림 추출 연산자 ('<<')는 공백에서 멈 춥니 다. 전체 문자열을 원하면'std :: getline (cin, run);을 사용하십시오. – Chad

답변

2

귀하의 의견은 그럼 당신은

cin >> run; 

당신을 위해 작동하지 않습니다 귀하의 의견 (공백에 operator>> 휴식을) 받고하는 방법

> run converter 

인 경우. 루프를 처음 통과 할 때 "실행"문자열을 찾으려고 할 때 다시 이동하여 "변환기"문자열을 찾으려고 시도합니다. 전체 라인을 처리하고 싶다면

+0

굉장하고, cin >> getline (cin, run)으로 실행하면 완벽하게 작동합니다. – Dustin

0

if(found != string::npos) 블록의 끝에 continue;을 포함해야합니다.

그런 식으로 블록을 실행하면 다른 if 블록을 건너 뛰고 while 루프를 다시 시작합니다.

+0

여러 명령을 실행하려면 각 조건부 블록의 끝에 'continue'를 추가하면 허용되지 않습니다. –

+1

계속 거기에 계속 사용했지만 여러 명령을 실행할 수 없습니다. – Dustin

관련 문제