c언어 코드 한번 봐주실수 있나요?
분명 맞게 작성한거 같은데
90분 적으면 6000원으로 되는데 91분으로 적어도 6000원으로 나오네요..
혹시 제가 어떤 부분에서 잘못 작성했는지 알수 있을까요? 안되니 답답하네요ㅠ
else if 구문에서 10분 단위로 나누어 떨어지는 것을 확인 할때는 나머지 연산자를 쓰시면 됩니다.
else if(time % 10 == 0) // 10으로 나눈 나머지가 0이면 로직 수행
C를 한지 오래됐는데.. 아마 C는 0(거짓), 그외의 수는(참) 으로 인식이 되서..
91을 10으로 나누면 9가 나와서 참으로 되서 else if를 타는거 같네요.
도움이 됐으면 좋겠네요. ^^
안녕하세요~ 해당 코드에서 90분과 91분 모두 6000원이 나오는 이유는 / 연산자 때문에 그렇습니다^^
/ 연산자는 소수점을 제외한 몫을 결과로 반환하기 때문에
61 / 10과 60 / 10 모두 6을 반환하여 결과가 6000원으로 동일합니다~
1분 단위로 결과가 다르게 하고 싶은 경우에는 % 연산자인 나머지 연산자를 통해 결과를 받아서 원하는 부분에 맞게 코딩을 하시면 됩니다^^
이것이 맞는 정답일지는 모르겠으나 두번째 if문에서 조건이 문제가 되었던 것 같습니다.
이러한 방식으로 작성하면 될 것으로 보입니다.
int time, time2, money; //변수 지정
printf("승마 이용시간 : "); // 이용시간 입력값 출력문
scanf("%d", &time); // 이용시간 입력
money = 3000; // 최소 이용금액
time2 = time; // 시간 입력값 계산 변수 입력
if (time < 30) //30분 이하일경우
printf("%d분 %d원\n", time, money); //시간과 최소금액 출력
else if ((time % 10) == 0) // 이 부분에서 time / 10으로 작성하셨는데 그럴 경우 어떠한 값이 들어와도 참으로 인식하여 else
// 이후로 넘어가지 않습니다. 그러므로 time값을 10으로 나눈 나머지값이 있으냐 없으냐로 계산.
{
time2 = time - 30;
money = (time2 / 10 * 500) + 3000;
printf("%d분 %d원\n", time, money);
}
else
{
time2 = time - 30;
money = (time2 / 10 * 500) + 3000 + 500;
printf("%d분 %d원\n", time, money);
}
두번제 조건이 틀린것으로 보입니다.
else if(time/10) 의 의도가 시간이 10분단위로 딱떨어지는 것으로 생각하셨을것 같습니다만,
6000이든 6001이든 위 공식을 넣으면 600이나옵니다.
나누기 연산은 나머지를 버립니다.
else if(time%10==0) 으로 나눈 나머지값이 0인지 체크해보세요
13 line else if 조건절이 잘못된 것 같아요
10분단위로 나누어지는걸 확인하려면 나누기 연산/ 가 아니라 나머지 연산 %로 되어야 할 것 같아요
else if(time2 % 10 == 0 ){
}
10으로 나누었을때 나머지가 없을때가 10분단위 시간이 되기때문에 나머지 연산인 %을 사용해주시면 될것같아요.
91%10 = 1 입니다.
안녕하세요!
if(time < 30) // 시간이 30분 미만일 때이때는 time이 30 미만이면 잘 들어오겠지만, 30이 넘어가면 else if로 가겠죠?
else if(time /10) // 시간이 10분 단위로 나뉘어질 때여기서 문제가 발생합니다. C언어에서 if는 0 이외에 숫자는 true로 간주합니다.
(보통은 0이 false, 1이 true, 실제로는 0 이외의 모든 숫자는 true)
time이 91이면, time / 10은 9.1, int형은 정수형이므로 9죠? 9는 true입니다.
현재 코드에서는 사실상 30 미만의 숫자가 아니면 무조건 else if(time / 10)로 들어갑니다.
91분이 인식되게 하려면 조건식을 조금 바꿔야겠지요?
else if(time % 10 == 0) // 시간이 10분 단위로 나뉘어질 때이런 식으로요. time을 10으로 나눈 나머지가 0이면 10분 단위로 나누어떨어진다는 의미입니다.
안녕하세요
else if 구문이 잘못된것같습니다.
10분단위로 나누었을때 나머지값이 없이 나누어 떨어진다를 표현할때는
time%10 == 0 이라고 표현해야합니다
즉 else if(time % 10 == 0) 이라고해야 90입력시에만 해당 else if 문을 탈것입니다.
한번 바꿔서 다시 실행시켜보시기 바랍니다.
그림 상태가 별로라 정확하게 디버깅 하기가 힘드네요.
먼저 time을 10으로 나누는 것에서 원치않는 답이 나오는 것 처럼 보입니다.
90 나누기 10은 9, 91 나누기 10은 9.1이지만
c언어에서 정수 연산을 하기 때문에 둘 다 9의 값을 가집니다.
그런데 else if문을 보시면 time / 10 이 10분 단위로 나뉘어질 때라고 되어있습니다.
그러면 time / 10 은 90이든 91이든 9가 되기 때문에 else if로 빠집니다.
주석대로라면 time % 10 == 0이 되어야 됩니다. (10으로 나눈 나머지가 0인 경우)
안녕하세요.
심심해서 한번 코딩을 해봤습니다.
변수명을 조금 바꿨고요
if문은 하나만 써도 되겠네요~!
한번 체크해보시고 원하는 값이 잘 나오는지 봐두세요 ㅎㅎ
간단하게 테스트만 해봐서... 아마 맞을겁니다.
if문 괄호안에는 조건식을 넣어야합니다. time/10 같은 수식은 넣으면 안돼요
괄호안은 참 거짓만 판단한답니다.
#include <stdio.h>
int main(void) {
int time, tmp_time, add_fee;
int fee = 3000;
printf("승마 이용시간을 입력하시오 : ");
scanf("%d", &time);
tmp_time = time;
if(time >= 30) {
tmp_time = tmp_time-30;
add_fee = (tmp_time/10) * 500;
fee = fee + add_fee;
}
printf("%d분의 탑승요금 : %d원 \n", time, fee);
return 0;
}