문제:

 정수 값과 반올림 자리를 인자로 받아 반올림된 결과를 리턴하는 함수를 작성하시오. 해당 함수를 사용하여 사용자가 입력한 정수를 사용자가 입력한 자리값에서 반올림하여 출력하는 프로그램을 작성하시오.
  • 함수는 사용자가 입력한 정수 값과 반올림할 자리값을 나타내는 두 정수를 인자로 가진다.
  • 함수는 다음 리턴 값을 가진다.
    • 0 또는 양의 정수: 반올림 한 값
    • -1: 인자의 값이 음수이거나, 반올림하고자 하는 값보다 자리수가 더 클 경우
  • 프로그램은 사용자의 잘못된 입력을 걸러낼 수 있어야 한다. 입력한 자리값과 숫자에 대해 함수의 리턴 값이 -1인 경우 에러 메시지를 출력하고 프로그램을 종료한다.
input an integer: 35249
input the position of the number to be rounded: 2
result: 35200



입니다.


제가 구현한 프로그래밍입니다.



#include <stdio.h>


int upanddown(int integer, int position) /*반올림하는 함수*/


{


int position10 = 1, n;            /*position10은 반올림 하는 자리의 10의 자리값.ex) position이 2면 position10은 100이다.

                                 n은 position10을 이런식으로 만들기 위해 for문에 넣으려고 선언.*/

 


for (n = 0; n < position; n++)


position10 *= 10;




if (integer<0 || (integer%position10)==0)/*정수가 0 이하이거나, 반올림 하는 자리가 정수보다 클경우 -1로 반환한다.*/


{

return -1;

}





else          /*position10을 반으로 나눈값이 반올림의 기준이 된다.

 반올림의 공식을 활용하여 return값에 반올림의 값을 반환해 주었다.*/


{

if ((integer%position10) >= ((position10) / 2))


return (((integer / position10) + 1)*position10);


else

return ((integer / position10)*position10);

}

}


int main(void)

{


int integer, position,result;  /*정수와 반올림할 자릿수, 반올림한 결과값을 정수로 선언한다.*/

printf("Input an integer: ");

scanf_s("%d", &integer);


printf("\nInput the position of the number to be rounded: ");

scanf_s("%d", &position);


result = upanddown(integer, position); /*결과값에 위의 함수의 값을 넣는다.*/


if (result == -1)

{


printf("양의정수를 입력하시오. 양의 정수를 입력하셨다면 자릿수를 잘못 입력하신겁니다.\n");

return 0;

}

else


printf("result: %d\n", result);


return 0;

}


문제는 

  • -1: 인자의 값이 음수이거나, 반올림하고자 하는 값보다 자리수가 더 클 경우
프로그램은 사용자의 잘못된 입력을 걸러낼 수 있어야 한다. 입력한 자리값과 숫자에 대해 함수의 리턴 값이 -1인 경우 에러 메시지를 출력하고 프로그램을 종료한다.
이부분입니다. 여기서 음수입력까지는 에러문 잘 뜨는데 자릿수 초과하는게 에러문이 뜨지않고 계속 0으로 떠서요. 분명 (integer%position10)==0 이렇게 if문을 구현해서
350에 5이런거 입력하면 저 if문이 발동되고 return -1이 되야되는데...ㅠㅠ
한번만 도와주시면 감사하겠습니다. 다른 과목도 할게 많은데 이것만 한시간째네요...