2017-11-09 10 views
0

전체 코드의 일부입니다. 나는 실행을 시도 할 때 "월 및 지불 금액을 입력하십시오"까지 정상적으로 작동합니다. 그러나이 메시지 후에, 나는 "7 월 315.14"와 같은 해시 인덱스와 값을 넣습니다. 갑자기 "다른 쿼리 (Y/N)?"가 출력됩니다. 무한 루프. 오류 지점은 어디에 있습니까? 만약무한 루프 (C++에서)

int i; 
string str; 
cin >> i;   // [1] 
getline(cin, str); // [2] 

있을 때

  unordered_map<string,float> monthly_payment; 
      char query; 
      string month; 
      cout << "Enter number of payments : "; 
      cin >> payNum; 
      cout <<"Enter month and payment received : " << endl; 
      for(int i=0; i<payNum; i++){ 
       getline(cin, month,'\n'); 
       cin >> payment; 
       monthly_payment.insert(pair<string, float>(month,payment)); 
      } 
      cout << "Enter query month : "; 
      getline(cin, month, '\n'); 
      cout << "The payment is " << monthly_payment[month]<<endl; 
      do{ 
       cout << "Another query (Y/N)? "; 
       cin >> query; 
       if(query=='Y'){ 
        cout << "Enter query month : "; 
        getline(cin, month, '\n'); 
        cout << "The payment is " << monthly_payment[month]<<endl; 
       } 
      }while(query!='N'); 
+0

어떤 프로그래밍 언어입니까? –

+0

C++을 아는 사람들이 질문을 보거나, 그것을 태그로 추가하기를 원하는 경우 C++ ...... –

+0

, 그렇지 않으면 보지 못할 수 있습니다. –

답변

1

그것은 [1] 사용자 입력을 기다리는에서 멈춘다. 그런 다음 사용자가 32을 입력했는데 아무 일도 없었습니다. 그런 다음 사용자가 <enter>을 치고 입력 버퍼가 처리되어 32\n으로 플러시됩니다. 프로그램은 라인 [1]에서 32을 파싱하고 라인 [2]로갑니다. \n이 파싱 된 상태이므로 str이 빈 문자열이되고 프로그램이 앞으로 이동합니다.

리눅스에서는 입력 버퍼를 다른 방식으로 플래쉬 할 수 있습니다. 예를 들어 Ctrl + D를 누릅니다. 따라서 프로그램을 사용할 수있게됩니다.

문제를 해결하는 가장 좋은 방법은

string month; 
double payment; 
cin >> month >> payment; 

이 아니면 대안으로 당신은 어디서나 geline를 사용할 수 있으며 손에 의해 문자열을 구문 분석합니다.

+0

성공적으로 작동합니다! 고맙습니다! –