2010-01-24 2 views
2

저는 C++ 학습을 시작한 지 얼마되지 않았습니다. while 루프의 조건이 double 유형의 입력 일 때 while 루프와 관련하여 약간의 문제가 있습니다. 사용자로부터 사용자가 double 유형과 호환되는 값을 입력하지 않으면 루프가 자동으로 끊어지는 것을 이해합니다. 문제는 내 콘솔 응용 프로그램이 이중 이외의 다른 내용을 입력하면 종료됩니다. 문 입력 측정 및 출력 전체의 수를 계산하는 경우 초급 질문 - while 루프, 입력 유형을 조건으로 두 번 종료하기 C++

내가 일하고 있어요 현재 운동

는 while 루프를 사용하도록 요청하고있다. 사용자가 값을 입력 한 다음 측정 시스템을 입력합니다 (예 : 25m는 25m). 또한 입력 된 가장 높은 값과 가장 낮은 값을 기록하고 출력해야합니다.

double value = 0; 
double total = 0; 
double high = 0; 
double low = 0; 
string unit = " "; 

while (cin >> value >> unit && unit != "convert") 
{ 
if (unit == "in") {total = total+(value*2.54);// in = inches converting to cm 
     if (value*2.54 > high) high = value; 
     if (value*2.54 < low) low = value; 
     } 

else if (unit == "m"){total = total+(value*100);// m = metres, converting to cm 
     if (value*100 > high) high = value; 
     if (value*100 < low) low = value; 
     } 

else if (unit == "ft"){total = total+(value*30.48);// ft = feet, converting to ft 
     if (value*30.48 > high) high = value; 
     if (value*30.48 < low) low = value; 
     } 
else if (unit == "cm"){total = total+value;// cm = centremetres 
     if (value*2.54 > high) high = value; 
     if (value*2.54 < low) low = value; 
     } 

else cout << "Unable to calculate unit type - " << unit << endl; 

value = 0; 
} 

cout << "Total length in centre-metres: " << total << endl 
    << "Total length in metres: " << total/100 << endl 
    << "Total length in feet: " << total/30.48 << endl 
    << "Total length in inches: " << total/2.54 << endl 
    << "\nHighest value: " << high << ", Lowest value: " << low << endl; 


keep_window_open(); 
return 0; 

keep_window_open이() 내 C++ 책과 함께 제공되는 사용자 정의 헤더 파일의 일부가 않습니다 모두 종료하는 문자를 입력하는 사용자에 대한 요청입니다.

나는 프로그램의 현재 상태가 약간 부풀어 오른 것을 알고 있지만 먼저 제대로 작동하도록하고 싶었다. 나는 사용자가 루프가 올바르게 작동 된 경우 그래서 실제로 볼 수 있었다 살해 단위로 '변환'을 입력하면,의 주위에 일을 사용했다. 이 프로그램은 마감을한다/double 타입 이외는 값으로 입력하지만 결과는 콘솔 창에 최대 플래시 후 즉시 종료 될 때 그 작업을 완료합니다.

도움을 주시면 감사하겠습니다.

cin >> value 

을 더블 이외의 입력 값이 더블을 기대하고 있기 때문에, 스트림, 나쁜 간다 :

답변

2

귀하의 문제는 당신이 말할 때이다. 스트림이 여전히 나빠서 keep_window_open() 함수도 실패합니다.

이 라운드 두 가지 방법이 있습니다 :

  • 기존 명령 줄 프롬프트 창에서 프로그램을 실행 - 프로그램 종료 후이 열려있을 것입니다. 이것은 최고의 범용 솔루션입니다.

  • 지우기 "일시 중지"코드를 사용하기 전에 스트림입니다. 불행히도 입력 한 최종 줄은 여전히 ​​버퍼에 있습니다. 당신의 "일시 중지"코드를 바꿉니다 : 그것은 일을 가정하는 방식이기 때문에

이 _

string line; 
if (! cin) { 
    cin.clear(); 
    getline(cin, line); 
} 
getline(cin, line); 
0

프로그램이 존재한다. 마지막으로 통화 시도를 기다리는 통화를 추가 할 수 있습니다. 그러면 통화 응답이 표시되고 통화를 종료하면 종료됩니다.

std::cin.get(); 
0

루프를 종료하려면 break 명령어를 사용할 수 있습니다.

종료 전에 결과를 보려면 getchar() 기능을 사용할 수 있습니다.