2014-02-17 3 views
-2

필자가 작성중인 C++ 프로그램에 대한 주행 거리 초과 계산 기능을 만들려고합니다. 이 함수가 switch 문 내에서 제대로 작동하도록하는 데 문제가 있습니다. 달성 (또는 계산)하려고하는 것은 carSize 마일리지 한도 * 일 동안의 마일리지입니다. 각 carSize에는 아래에 제공된 다른 초과/마일 계산 속도가 있습니다.렌터카 주행 거리 초과 계산 기능

내 코드는 지금까지 있습니다 :

double calcMilesFee(int miles, int days, char carSize) 
{ 
    double milesFee = 0; 
    double compactOverageCharge = .05; 
    double midSizeOverageCharge = .07; 
    double fullSizeOverageCharge = .09; 
    int compactDailyMilesLimit = 20; 
    int midSizeDailyMilesLimit = 25; 
    int fullSizeDailyMilesLimit = 30; 

    switch (carSize) 
    { 
     case 'c': 
     case 'C': 
     { 
      while (miles > compactDailyMilesLimit * days) 
      { 
       milesFee = (miles * days)/compactDailyMilesLimit; 
      } 
      if (milesFee > compactDailyMilesLimit) 
      { 
       milesFee = milesFee * compactOverageCharge; 
       cout << "Overage Fee is " << milesFee << endl; 
       break; 
      } 
     } 


     case 'm': 
     case 'M': 
     { 
      while (miles > midSizeDailyMilesLimit * days) 
      { 
       milesFee = (miles * days)/midSizeDailyMilesLimit; 
      } 
      if (milesFee > midSizeDailyMilesLimit) 
      { 
       milesFee = milesFee * midSizeOverageCharge; 
       cout << "Overage Fee is " << milesFee << endl; 
       break; 
      } 
     } 

     case 'f': 
     case 'F': 
     { 
      while (miles > fullSizeDailyMilesLimit * days) 
      { 
       milesFee = (miles * days)/fullSizeDailyMilesLimit; 
      } 
      if (milesFee > fullSizeDailyMilesLimit) 
      { 
       milesFee = milesFee * fullSizeOverageCharge; 
       cout << "Overage Fee is " << milesFee << endl; 
       break; 
      } 
     } 
    } 
    return milesFee; 

}

+2

제대로 작동하지 않습니다. – Bucket

+1

귀하의 의도가 다음 크기의 차량으로 넘어 가기를 원하지 않는 경우, 귀하가 필요로하는 케이스 - 레벨 단락 진술서를 제출하십시오. 그리고 정수 수학을 수천 (즉, int는 페니의 10 분의 1을 나타냅니다)의 정밀도로 사용하고 마지막에 최종 값 해결을 제안 할 것입니다. 통화 수학을하기 위해 부동 소수점이 잘못되었습니다. – WhozCraig

+0

또한 while 루프가 종료되지 않는 것처럼 보입니다. –

답변

0

모든 경우 문이 break로 끝나야합니다. 귀하의 경우에는 if 내부 명령문 중 하나라도 실패하면 결과가 다른 동작을 실행하는 다음 사례 명령문을 만드는 중단이 없습니다.

2

귀하의 문제는 다음과 같습니다

  1. 당신이 경우-조건을 제외하고 각 스위치 케이스 라벨에서 휴식하지 않았다.
  2. while 루프가 끝나지 않습니다. while 루프의 본문에는 조건부를 변경하는 내용이 없습니다.

이 문제는 상당히 간단 말했다 그것은 당신이되고 그것을 만드는 것보다는 :

#include <iostream> 
#include <cmath> 

double calcMilesFee(int miles, int days, char carSize) 
{ 
    const double compactOverageCharge = .05; 
    const double midSizeOverageCharge = .07; 
    const double fullSizeOverageCharge = .09; 
    const int compactDailyMilesLimit = 20; 
    const int midSizeDailyMilesLimit = 25; 
    const int fullSizeDailyMilesLimit = 30; 
    double overageCharge = 0.0; 
    int dailyMilesLimit = 0; 
    double milesFee = 0; 

    switch (carSize) 
    { 
     case 'c': 
     case 'C': 
      dailyMilesLimit = compactDailyMilesLimit; 
      overageCharge = compactOverageCharge; 
      break; 

     case 'm': 
     case 'M': 
      dailyMilesLimit = midSizeDailyMilesLimit; 
      overageCharge = midSizeOverageCharge; 
      break; 

     case 'f': 
     case 'F': 
      dailyMilesLimit = fullSizeDailyMilesLimit; 
      overageCharge = fullSizeOverageCharge; 
      break; 
    } 

    milesFee = std::max(0, miles - (days * dailyMilesLimit)) * overageCharge; 
    std::cout << "Overage Fee is " << milesFee << std::endl; 
    return milesFee; 
} 

내가 코멘트에서 언급 한 바와 같이, I는 필수 않는 한 통화 계산을위한 부동 소수점을 사용하지 권합니다 너의 임무를 위해. 최종 결과를 부동 소수점 값으로 할 수는 있지만 정수 정밀도를 동전의 10th와 같은 하드 한계로 사용하고 부동 소수점 변환 을 한 번마지막으로으로 수행합니다.

+0

이것은 내가 달성하려고했던 100 %입니다! 내 코드를 복잡하게 작성하는 데 너무 능숙한 것 같습니다. 많은 감사합니다 !! – user3320566