2016-05-31 4 views
0

현재 내 프로그램에서는 첫 번째 if 문을 실행합니다. 'w'가 요구 사항을 충족하지 못하는 경우에도 'w'에 3.5를 곱합니다. 입력 값을 4로 입력하면 출력은 14 (4 * 3.5)로 바뀌고 무게는 3에서 10 파운드 사이이므로 34 (4 * 8.5)가되어야합니다. 수정 프로그램은 간단하지만 프로그램을 찾을 수없는 것 같습니다.첫 번째 IF 문을 실행하는 프로그램

#include <iostream> 
using namespace std; 

int main() 
{ 
float w, price; 
cout << "Enter weight of package : "; 
cin >> w; 

if (0 < w <= 1) 
{ 
    price = 3.5 * w; 
} 
else if (1 < w <= 3) 
{ 
    price = 5.5 * w; 
} 
else if (3 < w <= 10) 
{ 
    price = 8.5 * w; 
} 
else if (10 < w <= 20) 
{ 
    price = 10.5 * w; 
} 
else if (20 < w <= 30) 
{ 
    price = 12.5 * w; 
} 
else if (30 < w) 
{ 
    cout << "The package cannot be shipped" << endl; 
} 
else 
    cout << "Invalid input" << endl; 
cout << "Weight : " << w << " lbs" << endl; 
cout << "Shipping cost : $" << price << endl; 
} 

답변

3

:

if (0 < w && w <= 1) 

대신에 : (여기서 w = 4 귀하의 예제를 사용하여)

if (0 < w <= 1) 

현재 접근 방식은 다음과 같이 평가 :

if ((0 < 4) <= 1) 

어떤 단순화 :

if (1 <= 1) 

어느 것이 true으로 평가됩니다. C++ 표준 (섹션 4.7, 제 4 항)에 따르면

:

소스 타입 bool 경우는 값 false은 제로 true가 1로 환산 한 값으로 변환된다. 당신이 기대하는 효과를 생성하지 않습니다

+1

아하이 봐요! 나는 '&&'를 사용하는 것에 대해 완전히 잊어 버렸고, 당신이 설명했던 것처럼 내 접근법이 어떻게 잘못 될지를 설명했습니다. 대단히 감사합니다. – Gizmoh

3

if(3<w<20)은 잘못된 문입니다. if(3<w&&w<20)이 있어야합니다.

당신이 사용하도록 구성했을 수
2

a < w < b는, 실제로 a < b은 참/거짓 값을가집니다 (a < w) < b)로 평가합니다. 다음과 같이 코드를 다시 작성하는 것이 좋습니다.

if (w <= 0) 
{ 
    cout << "Invalid input" << endl; 
} 
else if (w <= 1) 
{ 
    price = 3.5 * w; 
} 
else if (w <= 3) 
{ 
    price = 5.5 * w; 
} 
else if (w <= 10) 
{ 
    price = 8.5 * w; 
} 
else if (w <= 20) 
{ 
    price = 10.5 * w; 
} 
else if (w <= 30) 
{ 
    price = 12.5 * w; 
} 
else 
{ 
    cout << "The package cannot be shipped" << endl; 
} 

cout << "Weight : " << w << " lbs" << endl; 
관련 문제